systemdを使用してPythonスクリプトをサービスとして実行します。

systemdを使用してPythonスクリプトをサービスとして実行します。

私はDebian 8 VPSを受け取り、Pythonスクリプトをサービスとして実行しようとしています。次のように書きました(すべての操作はrootとしてログインしたSSHを介して行われます)。

[Unit]
Description=My Script Service
After=multi-user.target

[Service]
Type=idle
ExecStart=/usr/bin/python /web/cmcreader/test.py > /web/cmcreader/test.log 2>&1

[Install]
WantedBy=multi-user.target

私はそれを入れて/lib/systemd/system からchmodedしました。

chmod 644 /lib/systemd/system/cmcreader.service

その後、次を使用して有効にします。

systemctl daemon-reload
systemctl enable cmcreader.service

ただし、最後のコマンドは(enable)を返します。

Failed to execute operation: Invalid argument

私は何が間違っていましたか?ありがとうございます。

ベストアンサー1

ここでは、man systemd.directivesすべてのsystemdディレクティブのドキュメントを見つけることができます。ここでExecStart=文書の内容を見つけることができますman systemd.service

そこのドキュメントには次のように記載されています。

"<"、"<<"、"">"、および">>"を使用したリダイレクト、"|"を使用したパイプ、"&"を使用したバックグラウンドでのプログラム実行、およびその他のシェル構文要素はサポートされていません。

一般的には必要ありません。systemdアプリケーションはデフォルトですでにバックグラウンドで実行されているため、必要はありません&。また、出力を自動的にSTDOUTおよびSTDERRにキャプチャして記録するため、出力をログファイルにリダイレクトする必要もありません。

journalctl -u cmcreaderサービスのログを表示するか、journalctlすべてのログを表示するためにのみ使用してください。

システムファイルの構文がわからない場合は、次のものを使用できます。

systemd-analyze verify ./path/to/your.service

また、作成したサービスファイルも/etc/systemd/system。この/libディレクトリは、手動ではなくパッケージとしてインストールされたサービスファイルを保存するために使用されます。

最後に、enableサービスを起動するのではなく、起動時にアプリケーションを起動するように[Install]設定する部分のみを実行します。

サービスを開始するにはを使用しますsystemctl start your.service

おすすめ記事