エラーが発生した場合は、再起動後にスクリプトを再起動してください。

エラーが発生した場合は、再起動後にスクリプトを再起動してください。

数日間実行する必要があり、時には失敗する(エラーで終了する)スクリプト(作成せず、変更できません)があります。

この場合、私がすべきことは再起動サーバー(現在より良いソリューションはありません)と再起動スクリプト。現在私はそうします:

  • SSH経由でログイン

  • screen -S job

  • ./myscript.shタスクを開始します(このスクリプトには次のものしか含まれておらず、dothisプロセスがエラーで終了する可能性があるとします)。

  • CTRL AD画面から分離

  • ...数時間待ってください...

  • ログイン後、回復画面を使用してくださいscreen -r job

    まだ実行している場合は、切断して後でもう一度戻ってください。
    スクリプトが失敗した場合は、sudo reboot手順1から始めて時間がかかる作業を続行できます。

人の介入なしにどのようにこれを行うことができますか?

スクリプトにエラーがある場合は、それを自動化し、サーバーを自動的に再起動してスクリプトを再起動させるにはどうすればよいですか?

答え1

まず、スクリプトをコンテナに入れてみましょう。これにより、ホスト自体から一部の依存関係が削除され、自動的に再起動できます。

dockerとdocker-composeを使用したソリューション

この方法では docker と docker compose が必要です。 Ubuntuがある場合sudo apt install docker.io docker-compose

  1. Dockerfileを作成してコンテナを構築します。たとえば、次のようになります。
FROM ubuntu
COPY /path/to/script/on/host /myscript.sh
# maybe deal with some dependencies here
CMD /bin/bash /myscript.sh

上記の名前のフォルダをDockerfile任意のフォルダに保存します。以下では、いくつかの文書を見ることができます。https://docs.docker.com/engine/reference/builder/

  1. docker-compose.ymlの生成
version: "3.9"
services:
  scriptrunner:
    build: .
    restart: always

それdocker-compose.ymlを入れる同じディレクトリDockerfileを使って。ここでいくつかのドキュメントを参照してください。https://docs.docker.com/compose/compose-file/compose-file-v3/

スクリプトからいくつかの出力を取得したいとします。この場合、ホストとコンテナ間でフォルダを「共有」するためにドッカーボリュームを設定する必要があるかもしれません。

  1. 端末のフォルダに移動してを入力しますdocker-compose up -d

この方法では、スクリプトをコンテナに入れ、各スクリプトが失敗した後にコンテナを再起動すると、デーモンとして実行されます。

systemdを使用したソリューション

コンテナを扱いたくない場合は、スクリプトを別のコンテナにラップできますmy-runner.sh

#!/bin/bash
/path/to/my-script.sh || systemctl reboot

スクリプトが失敗した後、コンピュータが再起動されます。再起動するには、他のコマンドまたはルート権限が必要な場合があります。

それでは、実行スクリプト用のシステムサービスを作成しましょう。これ素晴らしいチュートリアルですが、次のようにまとめられています。

systemd 単位ファイルを作成し、/etc/systemd/system/my-script.service次の内容を入力します。

[Unit]
Description=my script runner service
After=network.target
Type=simple
User=my-user
ExecStart=/path/to/the/previous/my-runner.sh

[Install]
WantedBy=multi-user.target

これでコマンドを実行しsystemcl start my-script && systemctl enable my-scriptて起動し、再起動後に起動できるようになります。

関連情報