Ubuntu 16.04 화면에서 실행되는 프로그램은 종종 충돌이 발생하여 수동으로 다시 시작해야 하는 경우가 많습니다. 하루 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시간마다 실행되도록 예약하세요.