何年も前に、スタートアップスクリプトを/etc/rc.local
に書き込むことができます。すべてのシステムサービスが読み込まれた後、スクリプトが実行されます。
現在、systemdを使用しています。rc.local
はもうありません。 Systemdはサービスを並行して開始します。 rc.local`として機能する独自のサービスを作成することはできますが、すべてのシステムサービスが読み込まれた後にサービスが確実に実行されるとは限りません。
それを行う方法はありますか?または、systemdサービスファイルでBefore
およびAfter
を使用する必要がありますか?
Systemdでは、Before=
とAfter=
を使用して、他のサービスを中心にサービスを適切に注文することをお勧めします。
しかし、Before
とAfter
を使用しない方法を求めたので、以下を使用できます。
Type=idle
man systemd.service
の説明:
idle
の動作はsimple
とよく似ています。ただし、サービスプログラムの実際の実行は、すべてのアクティブなジョブがディスパッチされるまで遅延されます。これは、シェルサービスの出力とコンソールのステータス出力のインターリーブを回避するために使用できます。このタイプはコンソール出力を改善するためにのみ役立ち、一般的なユニット注文ツールとしては役に立たないことに注意してください。このサービスタイプの効果は5秒のタイムアウトの影響を受け、その後サービスプログラムが呼び出されます。
それは本当にあなたの「起動」の定義に依存します。 gettyが起動した直後に実行したいと思います。これを行うには、サービスを/etc/systemd/system/getty.target.wants/
ディレクトリに追加する必要があります。また、ファイルがこのディレクトリ内の他のサービスと同様のコードを使用していることを確認する必要があります。起動時とシャットダウン時にカスタムサービスを実行するには(マザーボードのブザーを鳴らすだけ)/etc/systemd/system/getty.target.wants/service_name.service
で次のスクリプトを使用します
[Unit]
After=systemd-user-sessions.service plymouth-quit-wait.service
After=rc-local.service
Before=getty.target
IgnoreOnIsolate=yes
[Service]
ExecStart=/usr/bin/myinitscript.sh start
ExecStop=/usr/bin/myinitscript.sh stop
Type=oneshot
RemainAfterExit=true
[Install]
WantedBy=basic.target
/usr/bin/myinitscript.sh
は実行可能で、最初にシバンがあります。
ブートのこの時点ですべてが開始されるわけではありませんが、これがログオンプロンプトがユーザーに表示される時点です。
これはBefore=
とAfter=
を使用しますが、私にとってははるかに理解しやすく、実際に機能しました。上記の回答は十分な情報を得られませんでした。これにより、ExecStart=
のようなサービスに限定されるのではなく、ExecStop=
とType=simple
の両方を使用できるようになります。