
起動時に特定のユーザーとして Python スクリプトを実行したい。
このスクリプトはサーバー (ソケットをリッスンし、リクエストを処理するなど) であり、バックグラウンドで実行する必要があります。出力はログ ファイルにパイプするのが望ましいです。
私の現在のアプローチは、次のように rc.local の最後にエントリを追加することです。
su -l usr -c 'script.py arg1 arg2 &> logfile.log &'
問題: スクリプトにはいくつかのprint文があります。それらはログファイルに表示されません。私は試しました
su -l usr -c 'script.py arg1 arg2 &> logfile.log &'
su -l usr -c 'script.py arg arg &> logfile.log &' &> secondLogfile.log &
su -l usr -c 'script.py arg arg &> logfile.log &'
su usr -c 'script.py arg arg &> logfile.log &'
何か基本的なことを見逃しているような気がします。多分、やり方がまったく間違っているのかもしれません。
システムは Fedora 15、スクリプトは Python3 で、ユーザーとしてコマンド ラインから正常に実行されます。ユーザーには、出力をリダイレクトするフォルダーへの書き込み権限があります (フォルダーを 777 にすることで除外しました)。
Python スクリプトを Systemd サービスとして実行しようとしましたが、スクリプトがリッスンするソケットを取得できないという問題が発生しました。(起動時に systemd サービスを有効にすると、ソケットが使用中であるという OS エラーが発生しますが、起動後に systemctl start script.service を実行すると正常に動作します)。
起動時にソケットを取得する Python スクリプトをユーザーとして起動するにはどうすればよいでしょうか?
答え1
これは私にとってはうまくいきます:
su -l usr -c "python script.py arg1 arg2 > logfile.txt &"
前の & により、「python script.py」が途中でバックグラウンドに追いやられていると思われます。
答え2
@Reboot 行は crontab でうまく機能しました。Freetx の回答は私にはうまくいきませんでした (まったく同じことを試しましたが、ダメでした :-(