#!/bin/sh # Локальный WebDAV для синхронизации Joplin (Mac ↔ телефон по LAN). # Данные: ~/JoplinSync. Учётка: ~/.config/joplin-webdav/env # # ./joplin-webdav-serve.sh # фон # ./joplin-webdav-serve.sh --foreground # передний план (для launchd) set -e CONFIG="${JOPLIN_WEBDAV_CONFIG:-$HOME/.config/joplin-webdav/env}" LOG_DIR="$HOME/Library/Logs/joplin-webdav" PID_FILE="$HOME/.config/joplin-webdav/rclone.pid" SCRIPT_DIR=$(CDPATH= cd -- "$(dirname "$0")" && pwd) mkdir -p "$LOG_DIR" "$(dirname "$PID_FILE")" if [ ! -f "$CONFIG" ]; then echo "Нет $CONFIG — запустите: $SCRIPT_DIR/joplin-webdav-install.sh" >&2 exit 1 fi # shellcheck disable=SC1090 . "$CONFIG" : "${JOPLIN_WEBDAV_USER:?}" : "${JOPLIN_WEBDAV_PASS:?}" : "${JOPLIN_WEBDAV_PORT:=8080}" : "${JOPLIN_WEBDAV_ROOT:=$HOME/JoplinSync}" mkdir -p "$JOPLIN_WEBDAV_ROOT" RCLONE="$(command -v rclone || echo /opt/homebrew/bin/rclone)" if [ ! -x "$RCLONE" ]; then echo "rclone не найден. Установите: brew install rclone" >&2 exit 1 fi run_rclone() { exec "$RCLONE" serve webdav "$JOPLIN_WEBDAV_ROOT" \ --addr "0.0.0.0:${JOPLIN_WEBDAV_PORT}" \ --user "$JOPLIN_WEBDAV_USER" \ --pass "$JOPLIN_WEBDAV_PASS" \ --vfs-cache-mode minimal \ --log-file "$LOG_DIR/rclone.log" \ --log-level INFO } case "${1:-}" in --foreground|-f) run_rclone ;; *) if [ -f "$PID_FILE" ]; then old_pid=$(cat "$PID_FILE") if kill -0 "$old_pid" 2>/dev/null; then echo "Уже запущен (PID $old_pid), порт ${JOPLIN_WEBDAV_PORT}" exit 0 fi rm -f "$PID_FILE" fi nohup "$0" --foreground >>"$LOG_DIR/stdout.log" 2>&1 & echo $! >"$PID_FILE" sleep 1 if kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then echo "WebDAV запущен (PID $(cat "$PID_FILE")), порт ${JOPLIN_WEBDAV_PORT}" else echo "Не удалось запустить. См. $LOG_DIR/stdout.log" >&2 rm -f "$PID_FILE" exit 1 fi ;; esac