У меня есть сценарий демона в /etc/init.d, который выполняет фоновую регистрацию пакетов с помощью tcpdump команда. Скрипт запускается нормально, используя интерактивную оболочку, используя sudo /etc/init.d/packetlog start
Когда я выполняю ту же команду через свой сценарий фабрики (см. Ниже), команда успешно возвращается, но процесс не выполняется.
def startpacketlog():
sudo(r'/etc/init.d/packetlog start')
Кроме того, служба не запускается автоматически при загрузке, как я ожидал.
Некоторые советы по устранению неполадок будут оценены
Сценарий Вот и модифицирован из этого оригинал
Обновить Кажется, это общая проблема с запуском любой службы на этом хосте с использованием фабрики. При запуске службы apache2 возникает такая же проблема. Однако я могу успешно остановить службу, использующую ткань.
Обновление 2 После перечитывания документация и некоторые эксперименты, следующее изменение устранило проблему. (Это отключает удаленный псевдотерминал, чем бы он ни был)
def startpacketlog():
sudo(r'/etc/init.d/packetlog start',pty=False)
Когда вы вызываете сценарий инициализации напрямую, ваша текущая среда может «просочиться» в сценарий инициализации.
Протестируйте свой сценарий инициализации с помощью соответствующих системных инструментов:
# Redhat/CentOS, and Ubuntu with upstart
sudo service packetlog start
# traditional method on Debian/Ubuntu
sudo invoke-rc.d packetlog start
Это обеспечит запуск скрипта в чистой среде, идентичной той, в которой он был бы запущен с помощью init.