私は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
。