为什么我不能在Ubuntu 12.04中运行这个Python脚本?

通常我这样做:

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所有

任何帮助表示赞赏!

* .conf脚本不是shell脚本,所以#!/bin/sh的解释器指令只是这个上下文中的非function性注释。

确保没有一个同名的系统工作,“testing版”。 我假设.conf是在

 /home/alex/.init/beta.conf 

用户作业实际上不应该需要setuid / setgid部分,除非您需要将GID切换到不是用户的主要GID(但是在id(1)的输出中看到的列表中)。

根据文档,build议的“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 

许多与系统pipe理的作业有关的问题,如id(1)或env(1)的输出都显示出来,所以你可以在python行之前加上这行:

 id ; env | sort 

用户的个人帐户通常会修改PATHvariables,额外的自定义脚本和他们遗忘的点文件等等,或者依赖于仅在完全交互式login(.bashrc和.bash_login和kin,等等)。

注意如果你的系统有一个真正的retro /bin/sh (不太可能),那么这个输出行必须写成:

 HOME=/home/ubuntu/project ; export HOME 

🙂

2个潜在的问题

  1. 该脚本没有shell行
  2. 启动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