Linuxの起動時にプロセスを起動するには?

Linuxの起動時にプロセスを起動するには?

最新のLinux(カーネル3.x、4.x、5.x)でアプリケーションを起動する方法と長所と短所について質問したいと思います。

私は3つの方法を知っています:

  • 予約されたこと
  • /etc/rc.local
  • システムスクリプト

しかし、私は知りません:

  • いつどのような方法を使うべきですか?
  • このメソッドはどのような順序で実行されますか?
  • 別の方法がありますか?

この特別な場合は、wvdialを実行してダイヤルアップ接続を維持するスクリプトを起動する必要があります。

ただ入れて仕上げになったのか、USBモデムドライバがロードされたのか/etc/rc.local確認できますか?それとも依存関係を使用して追加する必要がありますか?udev/dev/ttySomeModemsystemdudev

私はモデムが接続されているときに実行しudev、モデムが大容量記憶装置からモデムモードに入ったときにモデムシリアルポートへのシンボリックリンクを生成しようとしました。usb_modeswich/dev/ttyUSB*

答え1

まず、特定の質問に答えてから一般化して、wvdial問題に対する解決策を提案します。

このメソッドはどのような順序で実行されますか?

Cronは毎分実行され、特定の分にスケジュールされたコマンドを実行します。 Cronは起動には関係ありませんが、マシンがオフになっている間は何も実行されません。

/etc/rc.local は「最後」として実行されます。 System V init(sysemdより前)の場合本物システムは起動前に最後に実行されたと見なされます。 systemdを使用したら、ただ実行してください。ネットワークが稼働すると、他のサービスと同時に

systemdユニットはできるだけ早く依存関係と並列に実行されます(Wantsおよびのディレクティブを参照Requires)。システムユニット(5))と指示が適用BeforeされますAfter。システム区別する〜サイ注文するユニットとその依存関係

いつどのような方法を使うべきですか?

定期的に特定のタスクを実行する必要がある場合は、Cronを使用してください。 systemd を使用すると、次のことも使用できます。時間制労働者このために。

rc.localは正解であることがほとんどないので避けるべきです。適切なサービスの構成を編集したり、そのサービスのスクリプトを変更したり、新しいスクリプトを作成したりすることを検討してください。バラよりこのブログ投稿これの詳細な説明。

systemdユニットは、ほとんどの場合使用する必要があるユニットです(ただし、以下を参照)。 System Vでは、代わりにサービスを使用してください。

別の方法がありますか?

主なタスクをリストしましたが、他のいくつかのタスクのための特別な機能もあります。たとえば、udevは特定のイベントに基づいてスクリプトを実行できます。 KDEやGnomeなどのデスクトップ環境は自動起動機能を提供します。経験的に最も合理的な場合は、作業を実行してください。たとえば、オーディオプレーヤーを起動するにはKDE自動起動を使用し、OpenSSHサーバーを起動するにはsystemdを使用します。

この特別な場合は、wvdialを実行してダイヤルアップ接続を維持するスクリプトを起動する必要があります。

興味深い例は次のとおりです。初期化する必要があります。デバイス、その後実行サービス。私が考えることができる最も簡単な方法は次のとおりです。

  1. デバイスに「systemd」タグを付けます。systemdはそのためのデバイスデバイスを作成します。;
  2. 装置単位に依存するワンタイム単位を作成します。usb_modeswitch既存のudevハンドラが実行するのと同じシンボリックリンクを実行して作成する必要があります。
  3. systemctl edit wvdial.servicewvdialが作成したワンタイムユニットに依存するようにするには、Requires=およびディレクティブを追加します。After=モード設定が完了するまでwvdialが遅れます。

やや古いアプローチは、udevハンドラを維持し、シンボリックリンクが表示されるのを待つwvdialサービスを変更することです。

デバイスのプラグを抜いて再接続するときに、NMがリダイヤルを知るためにNetworkManagerにwvdialを教える必要があるかもしれません。しかし、実際にモデムを使ったことがないので、よくわかりません。

関連情報