Почему вывод демона может просто пойти в / tmp dir? - PullRequest
0 голосов
/ 29 марта 2012

класс ужина, который я использую, равен http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/, мой код указан ниже:

import os
import sys, time
from daemon import Daemon
class MyDaemon(Daemon):
    def run(self):
        while True:
            cmd='cat test.txt > output.txt'
            os.system(cmd)
            time.sleep(6000)
if __name__ == "__main__":     
    daemon = MyDaemon('/tmp/DebugDaemon.pid')
    daemon.start()

Если я запускаю DebugDaemon.py, можно создать /tmp/DebugDaemon.pid.

Тем не менее, файл ouput.txt не может быть создан, почему?

Если я вызываю его напрямую (т. Е. Нет использования кода демона), то он работает нормально.

Ответы [ 3 ]

1 голос
/ 29 марта 2012

Daemon отображается как chdir() до /. Могу поспорить, что у вашего процесса нет прав на запись /.

Ваш демон должен chdir() указать каталог, в котором находится test.txt (и для которого процесс имеет разрешения на запись). Кроме того, везде можно использовать полные пути:

cmd = 'cat /tmp/test.txt > /tmp/output.txt'
1 голос
/ 29 марта 2012

cmd является локальной переменной.Ваше назначение на самом деле ничего не делает, так как ни один код не использует его.

Модуль subprocess позволяет вам вызывать другие программы из Python.Я не знаю, как он взаимодействует с демонами.

0 голосов
/ 29 марта 2012

The

cat test.txt > output.txt

выполняется в / потому что суперкласс

# decouple from parent environment
os.chdir("/")

pid-файл может быть записан, потому что каждый может писать в / tmp - / не для записи всем.

...