3

行き詰まっており、助けが必要です。

プログラムをデーモン化するために python-daemon パッケージを使用しています。問題は、デーモンを開始および停止する方法がわからないことです。

私が走るとき

python myscript.py start

新しいプロセスが作成されます。しかし、ストップを実行しても何も起こりません。

# Setting logging configuration
logger = logging.getLogger("MyScript")

logger.setLevel(logging.DEBUG)

formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
handler = logging.FileHandler("/tmp/myscript.log")
handler.setFormatter(formatter)
logger.addHandler(handler)

pid = daemon.pidlockfile.TimeoutPIDLockFile("/tmp/myscript.pid", 10)
context = daemon.DaemonContext(
    #working_directory='/var/lib/foo',
    umask=0o002,
    pidfile=pid,
    files_preserve=[handler.stream],
    )

loop = True
def program_cleanup_test():
    logger.info("Stopping loop")
    loop = False

context.signal_map = {
    signal.SIGTERM: program_cleanup_test,
    signal.SIGHUP: 'terminate',
    #signal.SIGUSR1: reload_program_config,
    }

print "Running as a daemon"
with context:
    while loop:
        logger.info("0255")
        time.sleep(5)
4

1 に答える 1

0

シグナルを送ってみてください。SIGTERM を送信すると、関数 program_cleanup_test() が呼び出されます。SIGHUP を送信すると、デーモンは終了します。

このシェル コマンドはシグナルを送信します。

kill [-s signal] PID

したがって、次を実行できます。

kill -s TERM your_daemon_pid

これで program_cleanup_test() 関数が実行されます。

これが役立つことを願っています。


また、使用する必要はありません:

python myscript.py start

しかし、ただ:

python myscript.py

開始は sys.argv[1] になり、スクリプトは変更されないためです。sys.argv とは何かを知りたい場合は、ここに良い説明があります: https://stackoverflow.com/a/4118133/4898487

于 2015-07-17T14:51:30.660 に答える