用户 systemd 服务仅在 SSH-ing 进入机器时重启

User systemd service restarting only when SSH-ing into the machine

我有一个奇怪的情况,托管在 debian 实例上的 Web 服务有时会停止,并且不会自动重新启动。然而,当 SSH-ing 进入机器时,服务似乎自动重新启动。

我原本希望服务一直启动并重新启动,你能帮我找出问题所在吗?我可能误解了 systemctl --user 服务对 运行 的意义。

有问题的服务是 Rails 应用程序 运行 乘客独立,但我相信问题可能只是 systemd 文件中的错误配置。

我的系统文件

# .config/systemd/user/my_service.service
[Unit]
Description=passenger with rails server for my_service (production)
After=syslog.target network.target

[Service]
Type=forking
PrivateTmp=yes
WorkingDirectory=/websites/xxx/current

PIDFile=/websites/xxx/shared/tmp/pids/passenger.8080.pid

ExecStart=/home/outscale/.asdf/shims/bundle exec passenger start /websites/xxx/current
ExecStop=/home/outscale/.asdf/shims/bundle exec passenger stop /websites/xxx/current

MemoryAccounting=true
MemoryLimit=3584M

Restart=always
RestartSec=1
TimeoutStopSec=30
KillMode=mixed
StandardInput=null
SyslogIdentifier=%p

# Environment
Environment="RAILS_ENV=production"
Environment="NODE_ENV=production"

[Install]
WantedBy=default.target

我已经复制了这个安装服务使用

systemctl --user daemon-reload
systemctl --user enable my_service

我是不是想用别的东西,比如 systemctl --global enable unit?我希望我的服务 运行 与安装服务的“outscale”用户(否则我的版本管理器 asdf 无法按预期工作)

我找到了问题的解决方案 there。我误解了 --user 标志的行为(VS 在服务文件中使用 User= 属性)

我是 运行 在 debian 11 下并且如提到的答案中所述,我的服务在退出 ssh 后不一定会关闭,但只会在某个时候关闭(不清楚它是否发生在我的服务时第一次崩溃或某种垃圾收集)

作为对用户登录和启动所有服务的反应,在实例中通过 SSH 连接时,服务会神奇地再次启动。

因此,解决方法是使用 User= 重新实现服务,但不使用 --user 标志,使其成为全球可用的服务。