发布 v1.1.0:加密双向同步、从机日志TTL与一键部署

This commit is contained in:
2026-03-08 02:49:17 +08:00
parent 78b9685ee1
commit 394789f567
15 changed files with 1047 additions and 411 deletions

View File

@@ -0,0 +1,59 @@
#!/usr/bin/env bash
set -euo pipefail
if [[ "${EUID}" -ne 0 ]]; then
echo "Please run as root: sudo ./bin/install-slave.sh"
exit 1
fi
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PACKAGE_ROOT="$(dirname "$SCRIPT_DIR")"
INSTALL_DIR="${1:-/opt/redis-clip-sync}"
SERVICE_NAME="${SERVICE_NAME:-redis-clip-sync}"
RUN_USER="${RUN_USER:-${SUDO_USER:-root}}"
RUN_GROUP="${RUN_GROUP:-$RUN_USER}"
TEMPLATE_PATH="$PACKAGE_ROOT/systemd/redis-clip-sync.service.tpl"
TARGET_SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
if [[ ! -f "$TEMPLATE_PATH" ]]; then
echo "Template not found: $TEMPLATE_PATH"
exit 1
fi
echo "Installing to: $INSTALL_DIR"
mkdir -p "$INSTALL_DIR"
if [[ -f "$INSTALL_DIR/conf/config.properties" ]]; then
cp "$INSTALL_DIR/conf/config.properties" "$INSTALL_DIR/conf/config.properties.bak.$(date +%Y%m%d%H%M%S)"
echo "Existing config backed up in $INSTALL_DIR/conf"
fi
cp -a "$PACKAGE_ROOT/bin" "$INSTALL_DIR/"
cp -a "$PACKAGE_ROOT/lib" "$INSTALL_DIR/"
cp -a "$PACKAGE_ROOT/conf" "$INSTALL_DIR/"
cp -a "$PACKAGE_ROOT/systemd" "$INSTALL_DIR/"
mkdir -p "$INSTALL_DIR/logs" "$INSTALL_DIR/run"
chown -R "$RUN_USER:$RUN_GROUP" "$INSTALL_DIR"
chmod +x "$INSTALL_DIR/bin/start.sh" "$INSTALL_DIR/bin/stop.sh" "$INSTALL_DIR/bin/status.sh" "$INSTALL_DIR/bin/logs.sh"
SERVICE_CONTENT="$(<"$TEMPLATE_PATH")"
SERVICE_CONTENT="${SERVICE_CONTENT//__INSTALL_DIR__/$INSTALL_DIR}"
SERVICE_CONTENT="${SERVICE_CONTENT//__RUN_USER__/$RUN_USER}"
SERVICE_CONTENT="${SERVICE_CONTENT//__RUN_GROUP__/$RUN_GROUP}"
printf '%s\n' "$SERVICE_CONTENT" > "$TARGET_SERVICE_FILE"
systemctl daemon-reload
systemctl enable --now "$SERVICE_NAME"
echo
echo "Install completed"
echo "Service name: $SERVICE_NAME"
echo "Install dir: $INSTALL_DIR"
echo
echo "Useful commands:"
echo " systemctl status $SERVICE_NAME"
echo " journalctl -u $SERVICE_NAME -f"
echo " systemctl restart $SERVICE_NAME"

18
linux/slave-package/bin/logs.sh Executable file
View File

@@ -0,0 +1,18 @@
#!/usr/bin/env bash
set -euo pipefail
SERVICE_NAME="${SERVICE_NAME:-redis-clip-sync}"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
APP_HOME="$(dirname "$SCRIPT_DIR")"
LOG_FILE="$APP_HOME/logs/app.log"
if command -v systemctl >/dev/null 2>&1 && systemctl cat "$SERVICE_NAME" >/dev/null 2>&1; then
exec journalctl -u "$SERVICE_NAME" -f
fi
if [[ ! -f "$LOG_FILE" ]]; then
echo "Log file not found: $LOG_FILE"
exit 1
fi
exec tail -f "$LOG_FILE"

View File

@@ -0,0 +1,44 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
APP_HOME="$(dirname "$SCRIPT_DIR")"
JAR_PATH="$APP_HOME/lib/redis-clip-sync.jar"
LOG_FILE="$APP_HOME/logs/app.log"
PID_FILE="$APP_HOME/run/app.pid"
FOREGROUND="false"
CONFIG_PATH="$APP_HOME/conf/config.properties"
for arg in "$@"; do
if [[ "$arg" == "--foreground" ]]; then
FOREGROUND="true"
elif [[ "$arg" == *.properties ]]; then
CONFIG_PATH="$arg"
fi
done
if [[ ! -f "$JAR_PATH" ]]; then
echo "Jar not found: $JAR_PATH"
exit 1
fi
if [[ ! -f "$CONFIG_PATH" ]]; then
echo "Config not found: $CONFIG_PATH"
exit 1
fi
mkdir -p "$APP_HOME/logs" "$APP_HOME/run"
if [[ "$FOREGROUND" == "true" ]]; then
exec java -jar "$JAR_PATH" "$CONFIG_PATH"
fi
if [[ -f "$PID_FILE" ]] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then
echo "RedisClipSync already running (pid=$(cat "$PID_FILE"))."
exit 0
fi
nohup java -jar "$JAR_PATH" "$CONFIG_PATH" >> "$LOG_FILE" 2>&1 &
echo $! > "$PID_FILE"
echo "RedisClipSync started (pid=$(cat "$PID_FILE"))."

View File

@@ -0,0 +1,18 @@
#!/usr/bin/env bash
set -euo pipefail
SERVICE_NAME="${SERVICE_NAME:-redis-clip-sync}"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
APP_HOME="$(dirname "$SCRIPT_DIR")"
PID_FILE="$APP_HOME/run/app.pid"
if command -v systemctl >/dev/null 2>&1 && systemctl cat "$SERVICE_NAME" >/dev/null 2>&1; then
systemctl status "$SERVICE_NAME" --no-pager
exit 0
fi
if [[ -f "$PID_FILE" ]] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then
echo "RedisClipSync running (pid=$(cat "$PID_FILE"))."
else
echo "RedisClipSync not running."
fi

25
linux/slave-package/bin/stop.sh Executable file
View File

@@ -0,0 +1,25 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
APP_HOME="$(dirname "$SCRIPT_DIR")"
PID_FILE="$APP_HOME/run/app.pid"
if [[ ! -f "$PID_FILE" ]]; then
echo "No pid file found, service may not be running."
exit 0
fi
PID="$(cat "$PID_FILE")"
if kill -0 "$PID" 2>/dev/null; then
kill "$PID"
sleep 1
if kill -0 "$PID" 2>/dev/null; then
kill -9 "$PID"
fi
echo "RedisClipSync stopped (pid=$PID)."
else
echo "Process already stopped (pid=$PID)."
fi
rm -f "$PID_FILE"

View File

@@ -0,0 +1,18 @@
[Unit]
Description=Redis Clip Sync Service
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=__RUN_USER__
Group=__RUN_GROUP__
WorkingDirectory=__INSTALL_DIR__
ExecStart=__INSTALL_DIR__/bin/start.sh __INSTALL_DIR__/conf/config.properties --foreground
Restart=always
RestartSec=3
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target