bashスクリプトをバックグラウンドで実行するには?

bashスクリプトをバックグラウンドで実行するには?

私はbashスクリプトを学んでいて、バッテリーが足りないか充電されたときに通知を送信する短いプロジェクトを作成しました(通知を送信するために使用)。

端末を表示せずにこのスクリプトを実行する方法についてのアドバイスを聞きたいです。私の考えは、システムの起動時に実行する「スタートアップアプリケーション」ソフトウェアに追加することですが、端末を表示したくなく、バックグラウンドで実行するだけです。

答え1

システムサービスを設定できます。

次のように、お気に入りのエディタ(nano、vimなど)を使用してファイル(sudoなど)を作成できます。

sudo nano /etc/systemd/system/myexecuteable.service

少なくとも次の内容を含める必要があります。

[Unit]
Description=start my executable after multi-user target

[Service]
Type=simple
ExecStart=/path/to/my/executable

[Install]
WantedBy=multi-user.target

再起動後にサービスを開始するには、次の手順を実行します。 sudo systemctl enable myexecutable.service

Bashに何らかのループがある場合、サービスは引き続き実行されます。実行可能ファイルに出力がある場合(bashファイルで「ロガー」を使用)、いつでも次のものを使用できます。journalctl -u myexecutable.service

答え2

スクリプトは、次のようにコマンドラインからバックグラウンドで実行できます。

$ ./myscript.sh &

つまり、&コマンドに追加します。

「ターミナルを表示せずに」このスクリプトを実行したいとおっしゃいました。私はこれを行う2つの方法があると思います。

  1. サービスの作成systemd- 例:この回答

  2. cronシステムの起動時にスクリプトをジョブとして起動します。

ジョブを設定するには、cron新しい項目を作成する必要がありますcrontab

これを行うには、端末を開き、次のコマンドを入力します。

$ crontab -e

これにより、crontabエディタでファイルが開きます(nanoエディタに最適です)。エディター中にファイルの下部に次の行を追加します。

@reboot /home/user/myscript.sh & >> /home/user/myscript.log 2>&1 

/home/user/myscript.shどこにフルパススクリプトファイルに。スクリプトのすべての出力はリダイレクトのファイルとして/home/user/myscript.log。エラーメッセージがないかどうか、このログファイルを確認してください。

^ o使用している場合は、ファイルを保存してnano()エディタを終了します(^ x)。

覚えておくべきこと:

  1. myscript.shそれが正しいことを確認してください実行可能ファイル

  2. でコマンドを使用している場合は、myscript.shシステムがそのコマンドが見つかる場所を知っていることを確認してください。フルパスコマンドを実行するか、スクリプトでPATHを宣言してください。

もっとご質問がございましたらお知らせください(コメントを残してください)。最善を尽くしてお手伝いします。

関連情報