Roi*_*iel 20 services systemd 18.04
我创建了这个脚本:
[Unit]
Description=test
[Service]
WorkingDirectory=/home/someuser
ExecStart=/somescript.sh
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=autodeploy
Environment=NODE_ENV=production PORT=1494
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,它说:
Process: 8986 ExecStart=/somescript.sh (code=exited, status=203/EXEC)
Run Code Online (Sandbox Code Playgroud)
我明白这条消息意味着找不到脚本......为什么工作目录对我不起作用?
谢谢。
fil*_*den 31
systemdWorkingDirectory=设置定义了服务将在哪个目录上启动,这与cd您在 shell 中工作时用来更改目录时使用的相同。
这并不意味着所有其他路径(包括 from ExecStart=)现在都将与它相关,因此您仍然需要在该指令中完全指定脚本的路径:
ExecStart=/home/someuser/somescript.sh
Run Code Online (Sandbox Code Playgroud)
也许您正在考虑该RootDirectory=指令?该目录使用该chroot命令通过您指定的目录切换进程看到的文件系统的根目录,因此从您/对脚本位置的使用来看,这看起来可能是您想要的......但是,使用RootDirectory=需要您有一个系统映像,其下有二进制文件和库。就像,你需要有一个/bin/sh来运行你的 shell 脚本,一个/lib带有 libc 等。通常你不能只使用RootDirectory=你喜欢的任何目录......
因此,为了解决您所看到的问题,我的建议是更新ExecStart=以列出脚本的完整路径。
小智 30
我发现相对路径有效,但您对 ExecStart使用绝对路径。它不是在寻找/home/someuser/somescript.sh,而是在寻找/somescript.sh,即在根目录下寻找文件。那根本不是文件所在的位置,因此失败。
你也许可以通过改变来让它工作ExecStart=somescript.sh
来自: https: //www.freedesktop.org/software/systemd/man/systemd.service.html
对于每个指定的命令,第一个参数必须是可执行文件的绝对路径或不带任何斜杠的简单文件名。
| 归档时间: |
|
| 查看次数: |
47411 次 |
| 最近记录: |