自定义 systemd 单元无法启动 gnu screen 并分叉到后台

自定义 systemd 单元无法启动 gnu screen 并分叉到后台

我正在尝试制作一个 systemd 单元,它可以无头启动 GNU screen 中的脚本。我确实根据一些人提出的几个相关问题完成了我的工作。我还在ExecStartshell 中以它应该启动的用户身份测试了该行,并且它有效。

/usr/lib/systemd/system/devredacted.service这是我创建并放置在...中的编辑过的 systemd 单元文件。

[Unit]
Description=redacted development site inside screen
After=network-online.target

[Service]
Type=forking
Restart=on-failure
RestartSec=3
User=dev
Group=dev
ExecStart=/usr/bin/screen -L -dmS redacted-dev /home/dev/run.sh

当启动它时,我使用它来查找它,但它没有出现ps aux | grep screen,当我检查状态时,我看到了这个...

Oct 16 05:45:30 funbox systemd[1]: Starting devredacted.service - redacted development site inside screen...
Oct 16 05:45:30 funbox systemd[1]: Started devredacted.service - redacted development site inside screen.
Oct 16 05:45:30 funbox systemd[1]: devredacted.service: Deactivated successfully.

我以具有交互式 shell 的 systemd 单元用户身份对此进行了测试,并且单元文件执行的命令显然有效......

$ /usr/bin/screen -L -dmS redacted-dev /home/dev/run.sh
$ screen -ls
There is a screen on:
        31790.redacted-dev        (Detached)
1 Socket in /run/screen/S-dev.

答案1

我几乎想删除它,但我认为将其留在这里可以帮助那些在类似情况下寻求帮助的人。

问题实际上出在我的脚本中run.sh,它使用了用户 dev 主目录中的可执行文件的路径,并以该用户身份运行。测试时,我已经在 /home/dev 中,但使用 systemd 时却不在。这意味着我的脚本将退出,GNU 屏幕将关闭。

解决方案很简单,只需设置工作目录......

[Service]
WorkingDirectory=/home/dev

问题已得到解决并且现在一切正常。

相关内容