Pythonスクリプトをサービスとして実行する予定です。
[Unit]
Description=Description
Wants=network-online.target
After=multi-user.target network.target network-online.target
[Service]
Type=simple
Restart=always
ExecStart=/path/to/python /path/to/script.py
[Install]
WantedBy=multi-user.target
スクリプトがリモートコンピュータに接続されます。/path/to/python /path/to/script.py
シェルでスクリプトを実行すると正常に動作します。エラーはありません。ただし、サービスの実行中に予想される結果は表示されません。
状態を確認すると、次のような重複項目が表示されます。
Jul 2 00:00:41 user systemd[1]: Description
Jul 2 00:00:42 user python[12121212]: Pseudo-terminal will not be allocated because stdin is not a terminal.
Jul 2 00:00:42 user python[12121212]: Host key verification failed.
答え1
SSH接続は通常、「初回使用時の信頼」の概念に基づいています。したがって、初めて接続すると、リモートホストの指紋(キー)を信頼するかどうかを尋ねるメッセージが対話的に表示されます。
これは明らかに非対話型サービスには適用されません。sudo
ユーザー(ルート、サービスファイルから?)でサービスを実行し、リモートサーバーに接続してみてください。鍵を信頼すると、鍵が保存され、~/.ssh/known_hosts
サービスが実行されます。
(あなたのサービスでそれを使用している場合は、このファイルをロードするためのparamiko
呼び出しが必要ですload_system_host_keys()
。)