web-dev-qa-db-ja.com

サービスを開始できませんでした

Systemdサービスを作成しました:

[Unit]
Description=My service

[Service]
Type=forking
ExecStart=/bin/sh $HOME/theFolder/run.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=mine.service

それを/ etc/systemd/systemフォルダーに入れ、mine.serviceという名前を付けました。

Sudo service mine startそれは私にくれます:

Mine.service.Unit mine.serviceが見つかりませんでした

---更新-----

最初に実行するSudo systemctl daemon-reloadになり、メッセージは表示されなくなりましたが、サービスはまだ開始されていません。

16
George

$HOMEは、スクリプトを実行しているユーザーのホームディレクトリを指します。 Systemdサービスはrootで開始されるため、/root/theFolder/run.shを試行する可能性があります。サービスファイルでは絶対パスを使用します。

forkingオプションも設定しています。これはバックグラウンド自体のプログラムに必要ですが、スクリプトはこれを行いますか?ほとんどの場合はそうではありません。そうでない場合は、このオプションを削除する必要があります。そうしないと、systemdはスクリプトが終了して開始したと主張するのを待機します。

また、ホームディレクトリ内のスクリプトを指すシステムサービスファイルは推奨されておらず、セキュリティ上の問題がある可能性があります。それらはrootとして実行されるため、それらを変更できるすべてのユーザーが、コンピューターへのrootアクセス権を取得する可能性があります。スクリプトを/usr/local/binにコピーし、それが所有され、ルートによってのみ書き込み可能であることを確認して、これを停止することをお勧めします。サービスファイルのUser=およびGroup=オプションを使用して、権限のないユーザーとしてスクリプトを実行することもお勧めします。

ユーザーとして実行したい場合は、サービスファイルを~/.config/systemd/user/に入れ、systemctl --user enable yourservice && systemctl --user start yourserviceで開始/有効化することをお勧めします(注:rootではなくユーザーとして実行してください)。ユーザーサービスファイルの詳細については this を参照してください。

14
Michael Daffin