我尝试运行这些命令
$ nano /usr/bin/script.sh
$ chmod +x /usr/bin/script.sh
$ cat /lib/systemd/system/shellscript.service
[Unit]
Description=My Shell Script
[Service]
ExecStart=/usr/bin/script.sh
[Install]
WantedBy=multi-user.target
$ systemctl daemon-reload
$ systemctl enable shellscript.service
$ systemctl start shellscript.service
但在检查服务状态时,我得到:
$ systemctl status shellscript.service
shellscript.service - My Shell Script
Loaded: loaded (/lib/systemd/system/shellscript.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2022-05-23 13:20:33 EEST; 14s ago
Process: 1276 ExecStart=/usr/bin/script.sh (code=exited, status=1/FAILURE) Main PID: 1276 (code=exited, status=1/FAILURE)
CPU: 10ms
May 23 13:20:33 kali systemd[1]: Started My Shell Script.
May 23 13:20:33 kali script.sh[1276]: /usr/bin/script.sh: line 25: AthanMayT.txt: No such file or directory
May 23 13:20:33 kali systemd[1]: shellscript.service: Main process exited, code=exited, status=1/FAILURE
May 23 13:20:33 kali systemd[1]: shellscript.service: Failed with result 'exit-code'.
答案1
你的shellscript.service
定义有效。 shell 脚本已执行,但脚本第 25 行的某些命令返回错误消息:
AthanMayT.txt: No such file or directory
这导致脚本退出并显示状态码 1,表示失败。
此类错误通常是由于当前工作目录不是您所期望的目录而引起的。
您应该注意,由 systemd 执行的任何进程或脚本systemd
通常不会在任何用户的主目录中执行:由 systemd 启动的任何进程的默认工作目录将是系统的根目录,或/
.
要进行故障排除,请像这样运行脚本来模拟 systemd 执行时的条件:
cd /
/usr/bin/script.sh
您可能应该对脚本中引用的每个文件使用完整路径名,或者cd /full/path/to/some/directory
在脚本的开头显式包含 a 以确保按照您期望的方式解释相对路径名。