|
|
@@ -19,7 +19,11 @@ RUN_GROUP=""
|
|
|
RUN_USER_SET="0"
|
|
|
RUN_GROUP_SET="0"
|
|
|
RUN_HOME=""
|
|
|
-INTERVAL="30min"
|
|
|
+PEAK_START_HOUR="19"
|
|
|
+PEAK_END_HOUR="24"
|
|
|
+PEAK_TZ="Asia/Shanghai"
|
|
|
+PEAK_INTERVAL="10min"
|
|
|
+OFFPEAK_INTERVAL="30min"
|
|
|
INSTALL_DEPS="1"
|
|
|
CONFIG_PATH=""
|
|
|
GIT_PUSH_ENABLED="1"
|
|
|
@@ -42,7 +46,12 @@ Default behavior:
|
|
|
Options:
|
|
|
--user <name> Service user (default: current sudo user)
|
|
|
--group <name> Service group (default: current sudo user's group)
|
|
|
- --interval <value> Timer interval, e.g. 1h/30min (default: 30min)
|
|
|
+ --interval <value> Alias for --offpeak-interval (default: 30min)
|
|
|
+ --peak-start <hour> Peak period start hour, 0-23 (default: 19)
|
|
|
+ --peak-end <hour> Peak period end hour, 1-24 (default: 24)
|
|
|
+ --peak-tz <timezone> Peak period timezone (default: Asia/Shanghai)
|
|
|
+ --peak-interval <value> Update interval during peak (default: 10min)
|
|
|
+ --offpeak-interval <value> Update interval during offpeak (default: 30min)
|
|
|
--config <path> Config file path (default: <repo>/config.server.json)
|
|
|
--git-push <0|1> Enable/disable push to remote (default: 1)
|
|
|
--git-push-remote <name> Remote name for push (default: origin)
|
|
|
@@ -57,10 +66,9 @@ Options:
|
|
|
Examples:
|
|
|
sudo bash scripts/install_debian.sh
|
|
|
sudo bash scripts/install_debian.sh --config /opt/vmess-domain-rotator/config.server.json
|
|
|
- sudo bash scripts/install_debian.sh --interval 10min
|
|
|
+ sudo bash scripts/install_debian.sh --peak-start 18 --peak-end 23
|
|
|
+ sudo bash scripts/install_debian.sh --peak-interval 5min --offpeak-interval 15min
|
|
|
sudo bash scripts/install_debian.sh --git-push 0
|
|
|
- sudo bash scripts/install_debian.sh --git-http-username aurora --git-http-token-file /root/.config/vmess-token
|
|
|
- sudo bash scripts/install_debian.sh --git-use-credential-store 1 --git-credentials-file /home/aurora/.git-credentials
|
|
|
EOF
|
|
|
}
|
|
|
|
|
|
@@ -81,7 +89,27 @@ while [[ $# -gt 0 ]]; do
|
|
|
shift 2
|
|
|
;;
|
|
|
--interval)
|
|
|
- INTERVAL="$2"
|
|
|
+ OFFPEAK_INTERVAL="$2"
|
|
|
+ shift 2
|
|
|
+ ;;
|
|
|
+ --peak-start)
|
|
|
+ PEAK_START_HOUR="$2"
|
|
|
+ shift 2
|
|
|
+ ;;
|
|
|
+ --peak-end)
|
|
|
+ PEAK_END_HOUR="$2"
|
|
|
+ shift 2
|
|
|
+ ;;
|
|
|
+ --peak-tz)
|
|
|
+ PEAK_TZ="$2"
|
|
|
+ shift 2
|
|
|
+ ;;
|
|
|
+ --peak-interval)
|
|
|
+ PEAK_INTERVAL="$2"
|
|
|
+ shift 2
|
|
|
+ ;;
|
|
|
+ --offpeak-interval)
|
|
|
+ OFFPEAK_INTERVAL="$2"
|
|
|
shift 2
|
|
|
;;
|
|
|
--config)
|
|
|
@@ -225,6 +253,37 @@ if [[ -z "$RUN_HOME" ]]; then
|
|
|
exit 1
|
|
|
fi
|
|
|
|
|
|
+to_minutes() {
|
|
|
+ local val="$1"
|
|
|
+ if [[ "$val" =~ ^([0-9]+)min$ ]] || [[ "$val" =~ ^([0-9]+)m$ ]]; then
|
|
|
+ echo "${BASH_REMATCH[1]}"
|
|
|
+ elif [[ "$val" =~ ^([0-9]+)h$ ]]; then
|
|
|
+ echo $(( ${BASH_REMATCH[1]} * 60 ))
|
|
|
+ else
|
|
|
+ echo "$val" | tr -cd '0-9'
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+PEAK_INTERVAL_MIN=$(to_minutes "$PEAK_INTERVAL")
|
|
|
+OFFPEAK_INTERVAL_MIN=$(to_minutes "$OFFPEAK_INTERVAL")
|
|
|
+
|
|
|
+if [[ -z "$PEAK_INTERVAL_MIN" ]] || [[ "$PEAK_INTERVAL_MIN" -eq 0 ]]; then
|
|
|
+ log_err "Error: invalid peak interval: $PEAK_INTERVAL"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+if [[ -z "$OFFPEAK_INTERVAL_MIN" ]] || [[ "$OFFPEAK_INTERVAL_MIN" -eq 0 ]]; then
|
|
|
+ log_err "Error: invalid offpeak interval: $OFFPEAK_INTERVAL"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+# Timer runs at the minimum of the two intervals to handle both schedules
|
|
|
+if [[ "$PEAK_INTERVAL_MIN" -lt "$OFFPEAK_INTERVAL_MIN" ]]; then
|
|
|
+ TIMER_INTERVAL="$PEAK_INTERVAL"
|
|
|
+else
|
|
|
+ TIMER_INTERVAL="$OFFPEAK_INTERVAL"
|
|
|
+fi
|
|
|
+
|
|
|
if [[ "$INSTALL_DEPS" == "1" ]]; then
|
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
|
apt-get update -y
|
|
|
@@ -297,6 +356,11 @@ GIT_PUSH_REMOTE=${GIT_PUSH_REMOTE}
|
|
|
GIT_RUNTIME_BRANCH=runtime-state
|
|
|
GIT_HTTP_USERNAME=${GIT_HTTP_USERNAME}
|
|
|
HOME=${RUN_HOME}
|
|
|
+PEAK_START_HOUR=${PEAK_START_HOUR}
|
|
|
+PEAK_END_HOUR=${PEAK_END_HOUR}
|
|
|
+PEAK_TZ=${PEAK_TZ}
|
|
|
+PEAK_INTERVAL_MIN=${PEAK_INTERVAL_MIN}
|
|
|
+OFFPEAK_INTERVAL_MIN=${OFFPEAK_INTERVAL_MIN}
|
|
|
EOF
|
|
|
|
|
|
if [[ "$GIT_USE_CREDENTIAL_STORE" == "1" ]]; then
|
|
|
@@ -332,11 +396,11 @@ EOF
|
|
|
|
|
|
cat >"/etc/systemd/system/${SERVICE_NAME}.timer" <<EOF
|
|
|
[Unit]
|
|
|
-Description=Run VMess Domain Rotator every ${INTERVAL}
|
|
|
+Description=Run VMess Domain Rotator every ${TIMER_INTERVAL}
|
|
|
|
|
|
[Timer]
|
|
|
OnBootSec=2min
|
|
|
-OnUnitActiveSec=${INTERVAL}
|
|
|
+OnUnitActiveSec=${TIMER_INTERVAL}
|
|
|
AccuracySec=30s
|
|
|
Unit=${SERVICE_NAME}.service
|
|
|
Persistent=true
|
|
|
@@ -357,7 +421,10 @@ log " Working directory: ${APP_DIR}"
|
|
|
log " Config path: ${CONFIG_PATH}"
|
|
|
log " Service user: ${RUN_USER}"
|
|
|
log " Service group: ${RUN_GROUP}"
|
|
|
-log " Timer interval: ${INTERVAL}"
|
|
|
+log " Timer interval: ${TIMER_INTERVAL}"
|
|
|
+log " Peak hour: ${PEAK_START_HOUR} to ${PEAK_END_HOUR} (${PEAK_TZ})"
|
|
|
+log " Peak interval: ${PEAK_INTERVAL}"
|
|
|
+log " Off-peak interval: ${OFFPEAK_INTERVAL}"
|
|
|
log " Push enabled: ${GIT_PUSH_ENABLED}"
|
|
|
log " Push remote: ${GIT_PUSH_REMOTE}"
|
|
|
log " Auth mode: ${AUTH_MODE}"
|
|
|
@@ -365,7 +432,7 @@ log " Env file: ${ENV_FILE}"
|
|
|
log ""
|
|
|
log "Commands:"
|
|
|
log " Check status: systemctl status ${SERVICE_NAME}.timer"
|
|
|
-log " View logs: journalctl -u ${SERVICE_NAME}.service -n 50 --no-pager"
|
|
|
+log " View logs: journalctl -t ${SERVICE_NAME} -u ${SERVICE_NAME}.service -n 50 --no-pager"
|
|
|
log " Manual run: sudo systemctl start ${SERVICE_NAME}.service"
|
|
|
log " Force commit: sudo -u ${RUN_USER} /bin/bash ${APP_DIR}/scripts/run_update_and_commit.sh --force-commit ${CONFIG_PATH}"
|
|
|
log ""
|