私はシステムサービスを作りました。
[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
次のようになります。
鉱山を開始できません。サービスが見つかりません。ユニット鉱山。サービスが見つかりません
- - 更新 - - -
最初に実行しましたが、sudo systemctl daemon-reload
メッセージは表示されませんが、サービスはまだ開始されません。
答え1
$HOME
スクリプトを実行しているユーザーのホームディレクトリを指します。 Systemdサービスはrootとして開始されるため、これを試すことができます/root/theFolder/run.sh
。サービスファイルには絶対パスを使用してください。
オプションを設定することもできますforking
。これは独自のバックエンドのプログラムで必要です。スクリプトでこれを行いますか?ほとんどはそうではなく、そうでない場合はこのオプションを削除する必要があります。それ以外の場合、systemdはスクリプトが完了して開始されたことを宣言するのを待ちます。
また、システムサービスファイルをホームディレクトリのスクリプトとして指定することは推奨されず、セキュリティ上の問題となる可能性があります。ルートとして実行されるため、これを変更できる人は誰でも潜在的にコンピュータへのルートアクセス権を取得できます。/usr/local/bin
これを避けるために、スクリプトをコピーしてルートが所有し、ルートのみを書き込むことができることを確認することをお勧めします。 servicesファイルのオプションを使用してUser=
権限のないユーザーとしてスクリプトを実行するのも良い考えです。Group=
ユーザーとして実行するには、サービスファイルを挿入して~/.config/systemd/user/
起動/アクティブ化することをお勧めしますsystemctl --user enable yourservice && systemctl --user start yourservice
(ただし、rootではなくユーザーとして実行)。バラよりこれユーザーサービスファイルに関する追加情報。