守护程序无法从结构脚本或启动时启动 – 仅交互式启动

我在/etc/init.d中有一个守护进程脚本,它使用tcpdump命令执行一些后台数据包logging。 脚本使用sudo /etc/init.d/packetlog start使用交互式shell 启动正常

当我通过我的结构脚本(下面)执行相同的命令时,该命令成功返回,但进程没有运行。

def startpacketlog(): sudo(r'/etc/init.d/packetlog start') 

除此之外,服务不会像我预料的那样在启动时自动启动。

一些技巧来解决这个将不胜感激

脚本在这里,并从这个原始的修改

更新这似乎是一个普遍的问题,在这台主机上使用fabric启动任何服务。 当启动apache2服务时,我得到同样的问题。 尽pipe我可以成功地停止使用结构的服务。

更新2重新阅读文档和一些实验后,下面的修改解决了这个问题。 (这会禁用远程伪terminal,不pipe是什么)

 def startpacketlog(): sudo(r'/etc/init.d/packetlog start',pty=False) 

当你直接调用一个init脚本时,你当前的环境可能会“泄漏”到init脚本中。

使用适当的系统工具testing你的init脚本:

 # Redhat/CentOS, and Ubuntu with upstart sudo service packetlog start # traditional method on Debian/Ubuntu sudo invoke-rc.d packetlog start 

这些将确保脚本在干净的环境中启动,与init启动时的脚本相同。