システムの再起動時にLinuxコマンドとスクリプトを自動的に実行する方法

How Run Linux Commands



起動時にアプリとスクリプトを自動的に実行すると、一般的な起動タスクとイベントを自動化するのに役立ちます。この記事では、再起動または新規ログイン時にアプリとスクリプトを起動するために使用できるいくつかの方法について説明します。

スタートアップアプリケーション

Ubuntuおよびその他のGNOMEベースのディストリビューションには、単にスタートアップアプリケーションと呼ばれるアプリケーションが付属しています。これは、新しいシステムの再起動またはログインで実行されるアプリとスクリプトの管理に使用できます。







アプリケーションランチャーからスタートアップアプリケーションアプリを起動し、[追加]ボタンをクリックして新しいエントリを追加します。





必要に応じて[名前]フィールドと[コマンド]フィールドに入力し、[追加]ボタンをクリックして新しいエントリの作成を終了します。以下のスクリーンショットで作成されたエントリは、再起動/ログインのたびにシステム通知としてバックアップの作成リマインダーを送信します。独自のコマンドまたはbashスクリプトのフルパスに置き換えることができます。また、通常はファイルシステム全体のさまざまなbinフォルダーにある既存のシステムコマンドまたは実行可能ファイルを使用することもできます。





上記のように、バックアップのリマインダーは再起動のたびに表示されます。



Systemd

Systemdは、システムプロセスとOSコンポーネントを管理するためのさまざまなユーティリティを含むデーモンおよびサービスマネージャーです。単純な形式では、通常、新しいブートサイクルでサービスを開始および終了するために使用されます。

Systemdを使用すると、アプリを自動的に起動したり、新しい起動時にスクリプトを実行したりできます。上で説明したのと同じバックアップリマインダー通知を作成するには、最初に以下のコマンドを実行して必要なフォルダーとファイルを作成する必要があります。

$mkdir -NS/.config/システム/ユーザー
$ナノ/.config/システム/ユーザー/backup_reminder.service

nanoをお気に入りのテキストエディタのコマンドに置き換えます。 backup_reminderを任意の他の名前に置き換えます。

上記のコマンドを使用して作成したbackup_reminder.serviceファイルに以下のコードを貼り付けます。

[単位]
説明=再起動するたびにバックアップリマインダーを送信します
PartOf = graphical-session.target

[サービス]
ExecStart = bash -c'sleep 10; notify-send 'バックアップを作成する' '
Type = oneshot

[インストール]
WantedBy = graphical-session.target

上記のコードは非常に単純です。グラフィカルセッションがロードされてから10秒後に(再起動またはログインごとに1回)バックアップの作成通知を送信します。

以下のコマンドを実行してサービスを有効にし、再起動するたびに自動的に実行できるようにします。

$chmod 644/.config/システム/ユーザー/backup_reminder.service
$ systemctl - ユーザー 有効backup_reminder.service
$ systemctl - ユーザーデーモン-リロード
$再起動

これは、systemdを使用して起動時に基本的なコマンドを実行する簡単な例にすぎません。複数の条件と複数のコマンドを使用して高度なサービスを作成することもできます。詳細については、以下のコマンドを実行してsystemdのマニュアルページを参照してください。

$システム

この例では、rootアクセスを必要とせず、root権限を必要としないアプリの自動起動に適した新しいサービスの作成について説明していることに注意してください。 rootアクセスを必要とするスクリプトを自動起動する場合は、〜/ .config / systemd / userフォルダーではなく/ etc / systemd / systemディレクトリに新しいsystemdサービスを作成し、上記のコマンドで–userスイッチを省略する必要があります。

cronジョブ

Cronは、ユーザーが指定した条件に従って、スケジュールされたタスクを定期的に実行できるツールです。これらのスケジュールされたジョブは、事前定義された形式でCrontabに作成されます。簡単に言うと、Crontabは、どのジョブをどの時点で実行するかをCronに指示します。

systemdと同様に、crontabジョブを使用してアプリを起動し、起動時にスクリプトを自動的に実行できます。新しいcronジョブを追加するには、次のコマンドを実行します。

$crontab-と

テキストファイルの最後に次の行を追加します(再起動するたびにGNOMEターミナルを自動的に起動します)。

SHELL = / bin / bash
@reboot sleep 30 && DISPLAY =:0gnome-terminal

独自のコマンドを使用するか、シェルスクリプトへのフルパスを指定できます。

systemdとは異なり、cronはグラフィカルセッションがロードされているかどうかを検出できないことに注意してください。 Xサーバーがロードされるまでの推定待機期間と表示IDを指定する必要があります。以下のコマンドを実行すると、ディスプレイIDを知ることができます。

$捨てた $ DISPLAY

コマンドまたはスクリプトを実行するまでの遅延は、システム構成と起動時間によって異なります。

Rc.local

起動時にスクリプトとコマンドを実行する別の方法は、rc.localファイルを使用することです。私のテストでは、グラフィカルセッションがライブになるまでスクリプトの実行を延期できなかったことに注意してください。スリープ遅延を追加すると、ログイン画面自体の表示が遅れます。このため、rc.localファイルを使用して起動時にグラフィカルアプリを実行することに成功しませんでした。上で説明した他のすべての例とは異なり、rc.localの編集にはrootアクセスも必要です。

コマンド/スクリプトをrc.localファイルに追加するには、以下のコマンドを実行します(rc.localファイルが存在しない場合は、新しいrc.localファイルを作成します)。

$sudo ナノ /NS/rc.local

#の間にコマンドを追加してください!以下に示すように、/ bin / bashを実行し、0行を終了します。

#! / bin / bash
path / to / my_script.sh
出口0

以下のコマンドを実行して、rc.localファイルを実行可能にします。

$sudo chmod+ x/NS/rc.local

起動スクリプトを有効にするには、再起動するだけです。

結論

これらは、起動時にスクリプトとアプリを自動的に実行するために使用できるいくつかの方法です。ルートアクセスを必要としないスクリプトを実行する場合は、Startup ApplicationsGUIアプリを使用することをお勧めします。ルートアクセスでアプリやスクリプトを実行する場合は、システムレベルのsystemdサービスを作成することをお勧めします。

著者について

ニティーシュクマール

私はフリーランサーのソフトウェア開発者であり、Linux、オープンソースソフトウェア、およびフリーソフトウェアコミュニティを愛するコンテンツライターです。

すべての投稿を表示