1

サービスとしてバックグラウンドで python スクリプトを実行しようとしています。そのために、ネットで見つけたこのスクリプトを使用しました。

これは /etc/init/myscript.conf に保存され、service myscript start で開始されます

description "MyScript"
author "Sherab Giovannini <shaddycls@gmail.com>"

start on runlevel[234]
stop on runlevel [0156]

chdir /root/projects/myscript
exec /root/projects/myscript/script.py | logger
respawn

しかし、stdout/stderr をどこにでもリダイレクトする方法がわかりませんでした...次のようにしてみました:

exec /root/projects/myscript/script.py > some.txt 

また、...

exec /root/projects/myscript/script.py >> some.txt

Googleで検索して見つけたすべての組み合わせ...些細な質問で申し訳ありませんが、行き詰まっています。

ありがとう

4

3 に答える 3

4

インストールしたファイルはupstartスクリプトです。

次のオプションを試してください。

# Note the full pathname
exec /root/projects/myscript/script.py > /tmp/some.txt 

また

# Note the shell command:
exec sh -c "/root/projects/myscript/script.py > /tmp/some.txt"

Python スクリプトが実行可能であることを確認します。

$ chmod +x /root/projects/myscript/script.py

システム ログ ファイルを調べて、有用なエラー メッセージがあるかどうかを確認します。

sudo vim /var/log/messages /var/log/syslog ...

編集:upstart通常、スクリプトを直接実行するため、シェルのリダイレクト文字は効果がありません。1 つの例外は、またはその他の特殊文字がある場合にupstart呼び出されることです。どうやらカウントされない。したがって、upstart スクリプトでこれを試してください。/bin/sh$>

exec FOO=$$ /root/projects/myscript/script.py > /tmp/output.txt 2> /tmp/error.txt

参照:

于 2013-11-07T22:42:33.307 に答える
0

最後に、プロセスを実行してバッファリングを回避するこの方法を見つけました。

nohup python -u /root/projects/myscript/myscript.py > /var/tmp/stdout.log &

この投稿に貢献してくれたすべての人に感謝します。

于 2013-11-08T02:56:18.447 に答える