![为什么我不能在 ubuntu 12.04 中将这个 python 脚本作为作业运行?](https://linux22.com/image/797855/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E4%B8%8D%E8%83%BD%E5%9C%A8%20ubuntu%2012.04%20%E4%B8%AD%E5%B0%86%E8%BF%99%E4%B8%AA%20python%20%E8%84%9A%E6%9C%AC%E4%BD%9C%E4%B8%BA%E4%BD%9C%E4%B8%9A%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
通常我会这样做:
cd /home/ubuntu/project/beta
python default.py -dev
为了启动 web.py 服务器
我更愿意这样做:
sudo start beta
这是我的 /etc/init/beta.conf
setuid alex
setgid alex
script
export HOME=/home/ubuntu/project
cd $HOME/beta
python default.py -dev
end script
当我这样做时sudo start beta
它启动了,但sudo status beta
几秒钟后显示它已停止。tail /var/log/syslog
显示kernel: [58023.somenumbers] init: beta main process (5460) terminated with status 134
现在,如果我这样做python default.py -dev
,echo $?
它就会显示出来0
- 所以我不明白为什么会出现上述退出代码。beta 文件夹和内容归 alex:alex 所有
任何帮助都将不胜感激!
答案1
*.conf 脚本不是 shell 脚本,因此 的解释器指令#!/bin/sh
在该上下文中仅仅是一个无功能的注释。
确保没有同名的系统作业“beta”。我假设 .conf 位于
/home/alex/.init/beta.conf
用户作业实际上不需要 setuid/setgid 部分,除非您需要将 GID 切换为非用户主 GID(但在 id(1) 输出中所见的列表中)。
根据文档,建议的“cd /home/alex/”应该是“chdir /home/alex”,同时省略多余的尾部斜杠。这可能会有所帮助,但脚本部分可能就足够了,尽管看到输出会很好 - 也许专注于捕获(真实)cd 和脚本的输出可能会有所帮助,使用:
script
export HOME=/home/ubuntu/project
{
cd $HOME/beta
python default.py -dev
} > $HOME/beta/log 2>&1
end script
许多与系统管理的作业启动相关的问题都会出现在 id(1) 或 env(1) 的输出中,因此您可以在 python 行之前添加此行:
id ; env | sort
用户的个人帐户经常会修改 PATH 变量、他们忘记的额外自定义脚本和点文件等等,或者依赖于 .bashrc 等中的环境设置,而这些设置只在完全交互式登录期间发生(.bashrc 与 .bash_login 和 kin 等等)。
请注意,如果您的系统具有真正的复古/bin/sh
(不太可能),则导出行必须写成:
HOME=/home/ubuntu/project ; export HOME
:-)
答案2
2 个潜在问题
- 该脚本没有 shell 行
- 启动时目录没有改变
script
。因此有可能script
尝试写入需要 root 权限的某个地方。
尝试关注
#!/bin/sh
setuid alex
setgid alex
#CD to alex home directory first so script can write output
cd /home/alex/
script
export HOME=/home/ubuntu/project
cd $HOME/beta
python default.py -dev
end script