为什么我不能在 ubuntu 12.04 中将这个 python 脚本作为作业运行?

为什么我不能在 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 -devecho $?它就会显示出来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 个潜在问题

  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

相关内容