我有以下 launcher.sh 文件:
cd /root/craig/mybot
tmux new-session -d -s mybot "'/usr/bin/python3.5' launcher.py --start --auto-restart"
然后我在 /systemd/system 中有以下 mybot.service 文件:
[Unit]
After=network.target
[Service]
ExecStart=/root/craig/mybot/launcher.sh
[Install]
WantedBy=default.target
当我运行时/root/craig/mybot/launcher.sh
它工作得很好,但是当我重新启动服务器时,服务启动,并且似乎 launcher.sh 从未启动(因为机器人从未上线)。为什么是这样?该服务显示为已启用。我用的是centOS 7。
当我跑步时systemctrl status mybot
,我得到:
May 25 03:48:56 vultr.guest systemd[1]: Starting mybot.service...
May 25 03:48:56 vultr.guest systemd[818]: Failed at step EXEC spawning /root/craig/mybot/launcher.sh: Exec format error
May 25 03:48:56 vultr.guest systemd[1]: mybot.service: control process exited, code=exited status=203
May 25 03:48:56 vultr.guest systemd[1]: Failed to start mybot.service.
May 25 03:48:56 vultr.guest systemd[1]: Unit mybot.service entered failed state.
May 25 03:48:56 vultr.guest systemd[1]: mybot.service failed.
答案1
我有以下 launcher.sh 文件:
[…]
May 25 03:48:56 vultr.guest systemd[818]: Failed at step EXEC spawning /root/craig/mybot/launcher.sh: Exec format error
systemd 不是 shell 解释器。 它不做 shell 所做的事情,包括如果不能直接将程序作为程序映像文件执行,则回退到解释程序本身。
/root/craig/mybot/launcher.sh
不是可被系统调用用作程序映像文件的有效可执行文件execve()
。为此,它需要具有由#!
文件前两个字节中的字符表示的幻数,后跟将解释文件其余部分的解释器的路径名。