決して死なないシェルスクリプト

決して死なないシェルスクリプト

私は決して死なないシェルスクリプトを書くのが好きです。つまり、シェルスクリプトはデータベースが5秒ごとに生きていることを繰り返し確認します。問題は、時々シェルスクリプトが異常終了するか、2つのスクリプトのいずれかで終了することです。

停止または終了した場合でも、自分で呼び出されるスクリプトが必要です。これを行う方法はありますか? ? ?

答え1

crontab ジョブを使用してスクリプトを呼び出します。

crontab -e

次の行を追加

* * * * * /path/to/your/script

これにより、毎分スクリプトが実行されます。ここでは、異なる実行時間をカスタマイズする方法を確認できます。クローンタブのマニュアルページ

申し訳ありません。 5秒ごとに実行する必要がある要件を見逃しました。ただし、コメントでは、Jonnhyが述べたように、cronjobを介してスクリプトが実行されていることを確認できます。

クローンタブスクリプト:

#!/usr/bin/bash
ps -ef|grep -v grep |grep script_name
if [ $? != 0 ]; then
    path/to/script/script_name
fi

スクリプトから:

#!/usr/bin/bash
while true; do
    #perform the test        
    sleep 5
done

または、initスクリプトに基づいてLinuxを使用している場合は、/ etc / inittabにアクセスできます。

10:35:respawn:/path/ro/your/script

inittabに入れることが最善の方法であるかどうかはわかりません。

システムにすでにsystemdがインストールされている場合は、これを行う方法もありますが、ここに入れる経験はありません。

答え2

無限ループのあるスクリプトを使用するのではなく操作を一度実行しますが、最初は5秒間スリープモードに切り替えてから、バックグラウンドで自分自身を呼び出すスクリプトを使用してください。

sleep 5
$0 &
# do whatever

スクリプトは$0名前()のみを使用して呼び出されるため、$ PATHにあると見なされます。

「何でも実行」中にスクリプトが死んだり終了したりすると、次の繰り返しが実行され続けます。

答え3

root権限がある場合は、システムが使用しているシステムに応じて、/etc/inittabまたは/etc/init/script.confにスクリプトを配置できます。終了時に常に再起動されるプロセスの例として、/sbin/getty のエントリを使用します。

答え4

プロセスがSIGKILLを介して終了しない限り、次のようにtrap使用できます。

#!/bin/bash

trap "" SIGHUP SIGINT SIGTERM

count=0
while ((1)); do
    echo $count
    sleep 2;
    count=$(($count+1));
done    

これを達成するためにCtrl-C(SIGTERM)を使用することはできません。停止するにはを使用する必要がありますkill -9 [pid]

関連情報