Only restart tracker on menu open if script changed
Compare md5 hash before/after regenerating tracker script to avoid unnecessary restarts and traffic data loss on every menu open. Also consolidate daemon-reload calls in show_menu auto-fix block.
This commit is contained in:
84
conduit.sh
84
conduit.sh
@@ -5550,17 +5550,48 @@ telegram_setup_wizard() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_menu() {
|
show_menu() {
|
||||||
# Auto-fix systemd service files: replace hard docker dependency for snap/non-systemd Docker
|
# Auto-fix systemd service files: rewrite stale/old files, single daemon-reload
|
||||||
if command -v systemctl &>/dev/null; then
|
if command -v systemctl &>/dev/null; then
|
||||||
local need_reload=false
|
local need_reload=false
|
||||||
for svc_file in /etc/systemd/system/conduit.service /etc/systemd/system/conduit-tracker.service; do
|
|
||||||
if [ -f "$svc_file" ] && grep -q "Requires=docker.service" "$svc_file" 2>/dev/null; then
|
# Fix conduit.service if it has old format (Requires, Type=simple, Restart=always, hardcoded args)
|
||||||
sed -i 's/Requires=docker.service/Wants=docker.service/g' "$svc_file"
|
if [ -f /etc/systemd/system/conduit.service ]; then
|
||||||
|
local need_rewrite=false
|
||||||
|
grep -q "Requires=docker.service" /etc/systemd/system/conduit.service 2>/dev/null && need_rewrite=true
|
||||||
|
grep -q "Type=simple" /etc/systemd/system/conduit.service 2>/dev/null && need_rewrite=true
|
||||||
|
grep -q "Restart=always" /etc/systemd/system/conduit.service 2>/dev/null && need_rewrite=true
|
||||||
|
grep -q "max-clients" /etc/systemd/system/conduit.service 2>/dev/null && need_rewrite=true
|
||||||
|
if [ "$need_rewrite" = true ]; then
|
||||||
|
cat > /etc/systemd/system/conduit.service << SVCEOF
|
||||||
|
[Unit]
|
||||||
|
Description=Psiphon Conduit Service
|
||||||
|
After=network.target docker.service
|
||||||
|
Wants=docker.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=/usr/local/bin/conduit start
|
||||||
|
ExecStop=/usr/local/bin/conduit stop
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
SVCEOF
|
||||||
need_reload=true
|
need_reload=true
|
||||||
fi
|
fi
|
||||||
done
|
fi
|
||||||
|
|
||||||
|
# Fix tracker service file
|
||||||
|
if [ -f /etc/systemd/system/conduit-tracker.service ] && grep -q "Requires=docker.service" /etc/systemd/system/conduit-tracker.service 2>/dev/null; then
|
||||||
|
sed -i 's/Requires=docker.service/Wants=docker.service/g' /etc/systemd/system/conduit-tracker.service
|
||||||
|
need_reload=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Single daemon-reload for all file changes
|
||||||
if [ "$need_reload" = true ]; then
|
if [ "$need_reload" = true ]; then
|
||||||
systemctl daemon-reload 2>/dev/null || true
|
systemctl daemon-reload 2>/dev/null || true
|
||||||
|
systemctl reset-failed conduit.service 2>/dev/null || true
|
||||||
|
systemctl enable conduit.service 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Auto-fix conduit.service if it's in failed state
|
# Auto-fix conduit.service if it's in failed state
|
||||||
@@ -5575,12 +5606,14 @@ show_menu() {
|
|||||||
local any_running=$(docker ps --format '{{.Names}}' 2>/dev/null | grep -c "^conduit" 2>/dev/null || true)
|
local any_running=$(docker ps --format '{{.Names}}' 2>/dev/null | grep -c "^conduit" 2>/dev/null || true)
|
||||||
any_running=${any_running:-0}
|
any_running=${any_running:-0}
|
||||||
if [ "$any_running" -gt 0 ] 2>/dev/null; then
|
if [ "$any_running" -gt 0 ] 2>/dev/null; then
|
||||||
# Always regenerate script so upgrades get latest code
|
local tracker_script="$INSTALL_DIR/conduit-tracker.sh"
|
||||||
|
local old_hash=$(md5sum "$tracker_script" 2>/dev/null | awk '{print $1}')
|
||||||
regenerate_tracker_script
|
regenerate_tracker_script
|
||||||
|
local new_hash=$(md5sum "$tracker_script" 2>/dev/null | awk '{print $1}')
|
||||||
if ! is_tracker_active; then
|
if ! is_tracker_active; then
|
||||||
setup_tracker_service
|
setup_tracker_service
|
||||||
else
|
elif [ "$old_hash" != "$new_hash" ]; then
|
||||||
# Restart to pick up new script
|
# Script changed (upgrade), restart to pick up new code
|
||||||
systemctl restart conduit-tracker.service 2>/dev/null || true
|
systemctl restart conduit-tracker.service 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -6562,10 +6595,37 @@ main() {
|
|||||||
echo -e "${RED}Failed to update management script${NC}"
|
echo -e "${RED}Failed to update management script${NC}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
# Fix conduit.service: replace hard docker dependency for snap installs
|
# Rewrite conduit.service to correct format (fixes stale/old service files)
|
||||||
if [ -f /etc/systemd/system/conduit.service ] && grep -q "Requires=docker.service" /etc/systemd/system/conduit.service 2>/dev/null; then
|
if command -v systemctl &>/dev/null && [ -f /etc/systemd/system/conduit.service ]; then
|
||||||
sed -i 's/Requires=docker.service/Wants=docker.service/g' /etc/systemd/system/conduit.service
|
local need_rewrite=false
|
||||||
systemctl daemon-reload 2>/dev/null || true
|
# Detect old/mismatched service files
|
||||||
|
grep -q "Requires=docker.service" /etc/systemd/system/conduit.service 2>/dev/null && need_rewrite=true
|
||||||
|
grep -q "Type=simple" /etc/systemd/system/conduit.service 2>/dev/null && need_rewrite=true
|
||||||
|
grep -q "Restart=always" /etc/systemd/system/conduit.service 2>/dev/null && need_rewrite=true
|
||||||
|
grep -q "max-clients" /etc/systemd/system/conduit.service 2>/dev/null && need_rewrite=true
|
||||||
|
if [ "$need_rewrite" = true ]; then
|
||||||
|
# Overwrite file first, then reload to replace old Restart=always definition
|
||||||
|
cat > /etc/systemd/system/conduit.service << SVCEOF
|
||||||
|
[Unit]
|
||||||
|
Description=Psiphon Conduit Service
|
||||||
|
After=network.target docker.service
|
||||||
|
Wants=docker.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=/usr/local/bin/conduit start
|
||||||
|
ExecStop=/usr/local/bin/conduit stop
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
SVCEOF
|
||||||
|
systemctl daemon-reload 2>/dev/null || true
|
||||||
|
systemctl stop conduit.service 2>/dev/null || true
|
||||||
|
systemctl reset-failed conduit.service 2>/dev/null || true
|
||||||
|
systemctl enable conduit.service 2>/dev/null || true
|
||||||
|
systemctl start conduit.service 2>/dev/null || true
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
setup_tracker_service 2>/dev/null || true
|
setup_tracker_service 2>/dev/null || true
|
||||||
if [ "$TELEGRAM_ENABLED" = "true" ]; then
|
if [ "$TELEGRAM_ENABLED" = "true" ]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user