【发布时间】:2017-06-04 20:59:42
【问题描述】:
我正在尝试使用 systemd 执行 shell 脚本。
如果我从 bash 运行我的脚本,一切正常。但是,如果我通过 systemd 运行相同的脚本,它永远不会完成。它似乎挂起的命令是:
random="$(LC_ALL=C tr -cd '[:alnum:]' < /dev/urandom | fold -w128 | head -n1)"
如果我用random="1234" 替换这一行,它也可以与systemd 一起运行。我猜“挂起”命令是tr——它的过程永远不会结束。
这是我正在使用的 systemd 单元文件:
[Unit]
Description=my script
[Service]
Type=forking
Restart=on-failure
ExecStart=/mypath/script.sh start
ExecStop=/bin/kill $MAINPID
ExecStopPost=/bin/rm -f /mypath/RUNNING_PID
[Install]
WantedBy=multi-user.target
【问题讨论】:
-
你的服务分叉了吗?如果不是,那么
Type=fork是错误的服务类型。有关选项,请参阅man systemd.service。 -
如果 systemd 发现脚本以非零状态退出,
Restart=on-failure将重新启动它。random="$(LC_ALL=C tr -cd '[:alnum:]' < /dev/urandom | fold -w128 | head -n1)"是脚本中的最后一个命令吗? -
@alvits 是的,如果服务崩溃,我想重新启动它。并且:tr 不是脚本中的最后一个命令。
-
@MarkStosberg 是的,它分叉了。
标签: systemd