守护进程无法通过 Fabric 脚本或在启动时启动 - 只能以交互方式启动

守护进程无法通过 Fabric 脚本或在启动时启动 - 只能以交互方式启动

我在 /etc/init.d 中有一个守护进程脚本,它使用tcpdump命令。脚本使用交互式 shell 正常启动,使用sudo /etc/init.d/packetlog 启动

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

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

此外,该服务并不会像我预期的那样在启动时自动启动。

希望能有一些关于如何解决此问题的提示

脚本是这里并修改自此原来的

更新 这似乎是使用 fabric 启动此主机上的任何服务时出现的一般问题。启动 apache2 服务时,我遇到了同样的问题。但我可以成功使用 fabric 停止服务。

更新 2 重读后文档经过一些实验,以下更改解决了该问题。(这将禁用远程伪终端,无论它是什么)

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

答案1

当您直接调用初始化脚本时,您当前的环境可能会“泄漏”到初始化脚本中。

使用适当的系统工具测试你的初始化脚本:

# Redhat/CentOS, and Ubuntu with upstart
sudo service packetlog start

# traditional method on Debian/Ubuntu 
sudo invoke-rc.d packetlog start

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

相关内容