Fix systemd services failing on snap Docker installs

Replace Requires=docker.service with Wants=docker.service so services
can start when Docker is installed via snap instead of apt. Auto-patch
existing service files on menu load for users upgrading from older versions.
This commit is contained in:
SamNet-dev
2026-01-31 12:21:50 -06:00
parent d5b68a38fa
commit 749621ccfd

View File

@@ -740,7 +740,7 @@ setup_autostart() {
[Unit] [Unit]
Description=Psiphon Conduit Service Description=Psiphon Conduit Service
After=network.target docker.service After=network.target docker.service
Requires=docker.service Wants=docker.service
[Service] [Service]
Type=oneshot Type=oneshot
@@ -1893,7 +1893,7 @@ setup_tracker_service() {
[Unit] [Unit]
Description=Conduit Traffic Tracker Description=Conduit Traffic Tracker
After=network.target docker.service After=network.target docker.service
Requires=docker.service Wants=docker.service
[Service] [Service]
Type=simple Type=simple
@@ -5008,7 +5008,7 @@ setup_telegram_service() {
[Unit] [Unit]
Description=Conduit Telegram Notifications Description=Conduit Telegram Notifications
After=network.target docker.service After=network.target docker.service
Requires=docker.service Wants=docker.service
[Service] [Service]
Type=simple Type=simple
@@ -5544,8 +5544,20 @@ telegram_setup_wizard() {
} }
show_menu() { show_menu() {
# Auto-fix conduit.service if it's in failed state # Auto-fix systemd service files: replace hard docker dependency for snap/non-systemd Docker
if command -v systemctl &>/dev/null; then if command -v systemctl &>/dev/null; then
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
sed -i 's/Requires=docker.service/Wants=docker.service/g' "$svc_file"
need_reload=true
fi
done
if [ "$need_reload" = true ]; then
systemctl daemon-reload 2>/dev/null || true
fi
# Auto-fix conduit.service if it's in failed state
local svc_state=$(systemctl is-active conduit.service 2>/dev/null) local svc_state=$(systemctl is-active conduit.service 2>/dev/null)
if [ "$svc_state" = "failed" ]; then if [ "$svc_state" = "failed" ]; then
systemctl reset-failed conduit.service 2>/dev/null || true systemctl reset-failed conduit.service 2>/dev/null || true