screen -x プログラムを自動的に再起動するには?

screen -x プログラムを自動的に再起動するには?

Ubuntu 16.04画面で実行されるプログラムは、しばしば競合が発生し、手動で再起動する必要があることがよくあります。 1日3回自動再起動を設定する方法です。 (crontabを閉じて再実行することを意味します)

ありがとう

答え1

HostFissionのソリューションは良いですが、プログラムが実行中であることを確認したくない場合は、プログラムを終了して次のように起動することもできます。

任意の名前(例:restart.sh)でbashファイルを作成し、次のように入力します。

#/bin/bash

/usr/bin/screen -SX NameOfTheScreen 終了;

/usr/bin/screen -S NameOfTheScreen /path/to/startscript;

-S はセッション名を設定します。 -X はセッションでいくつかの操作を実行します。

-S -X 名を使用すると、セッション名は -X と指定されますので、使用しないように注意してください。代わりに -SX 名を使用してください。

その後、一日中必要なだけファイルを実行するようにcrontabを設定できます。

クローンタップ-e

*3,6,9,12,15,18,21,0 * * * /path/to/restart.sh >> /path/to/logfile

答え2

起動時に実行中のプロセスのPIDをどこかに保存する必要があり、まだ実行中の場合はプロセスにSIGTERMを送信して終了するまで待ちます。以下のスクリプトはこれらのタスクを実行します。

PROGRAM=/bin/someProgram
PIDFILE=/var/run/someProgram.pid

if [ -f $PIDFILE ]; then
  PID = $(cat $PIDFILE)
  if [ -d /proc/$PID ] && [ "$(readlink -f /proc/$PID/exe)" == "$PROGRAM" ]; then
    echo -n "Shutting down..."
    kill $PID
    wait $PID
    echo "done."
  else
    echo "PID not found, program already terminated."
  fi
  rm $PIDFILE
fi

echo -n "Starting..."
$PROGRAM &
echo $! > $PIDFILE
echo "done."

次に、cronでX時間ごとに実行するようにスケジュールします。

関連情報