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
になり、メッセージは表示されなくなりましたが、サービスはまだ開始されていません。
$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 を参照してください。