bash 스크립트가 실행 중인지 cron에서 확인하도록 하세요.

bash 스크립트가 실행 중인지 cron에서 확인하도록 하세요.

사용자가 연결 상태를 지속적으로 모니터링하고 문제가 발생할 경우 조치를 취하는 데 while do사용할 수 있는 bash 스크립트가 있습니다 . sleep보호되지 않는 유일한 것은 스크립트 자체의 실행을 확인하는 것입니다.

myscript.sh부팅 시 init.d 항목을 실행한 다음 1분마다 CRON 작업을 실행하여 부팅 시 자동으로 실행한 스크립트가 여전히 실행되고 있는지 확인하고 싶습니다 . 이 목표를 어떻게 달성할 수 있나요?

답변1

최신 init 시스템(예: systemd 또는 upstart)을 사용하면 스크립트가 실패할 경우 init 시스템이 스크립트를 다시 시작하도록 할 수 있습니다.

어떤 이유로 이전 시스템을 사용할 수 없는 경우 스크립트에서 플래그 파일을 주기적으로 업데이트하도록 한 다음( touch /var/lib/myapp/flagfile) cron을 통해 플래그 파일이 특정 시간(초)보다 오래된지 확인하고 필요한 경우 스크립트를 다시 시작할 수 있습니다. 그것은 다음과 같습니다:

# get current time (in seconds since the epoch)
now=$(date +%s)

# get flag file mtime (in seconds since the epoch)
last_update=$(stat --printf '%Y' /var/lib/myapp/flagfile)

if [ $(( now - last_update )) -gt $interval ]; then
    restart_script_here
fi

시스템을 사용하세요

시스템을 사용할 수 있는 경우 .service. unit with theRestart=always key, which instructs systemd to restart the script whenever it fails. E.g., put something like this in/etc/systemd/system/myscript.service`를 생성하면 됩니다.

[Unit]
Description=This is my nifty service.
# Put any dependencies here

[Service]
Type=simple
ExecStart=/path/to/myscript
Restart=always

[Install]
WantedBy=multi-user.target

그런 다음 다음을 사용하여 활성화하십시오.

# systemctl enable myscript
# systemctl start myscript

예약된 작업 사용

영구 스크립트를 실행하는 대신 일반 cron 작업을 실행하여 필요한 검사 및 수정 작업을 수행할 수 있습니다. 분당 한 번만 확인하도록 제한되지만 해당 빈도가 허용 가능한 경우 이것이 더 간단한 솔루션일 수 있습니다.

관련 정보