우분투 14.04를 사용합니다. 언제든지 실행해야 하는 스크립트가 있습니다. 가장 쉬운 방법은 crontab을 사용하여 다른 스크립트를 실행하여 script1이 실행 중인지 확인하고 그렇지 않으면 다시 시작하는 것입니다.
나는 crontab과 가능한 경우 su 명령을 피하고 싶습니다(추가 설정 없이 루트로 실행하고 싶습니다). 또한 루트로서 script1을 실행할 사용자에 대해 하루에 한 번 모든 프로세스를 정리(종료)하는 스크립트가 있습니다. 정리 후, 그리고 script1이 중지된 경우 이 간격 동안 script1을 다시 시작하고 싶습니다.
답변1
스크립트를 systemd
서비스로 설치합니다. systemd가 종료되면 자동으로 다시 시작됩니다.
그리 어렵지는 않습니다. 짧은 something.service
파일( Restarts=always
어딘가에 위치가 있음)을 작성하고 이를 적절한 디렉토리에 배치/링크한 후 몇 가지 systemctl
명령을 실행하면 됩니다. 바라보다여기튜토리얼을 받아보세요.
추신: systemd는 14.04에서 사용할 수 있지만 시스템 자체는 많이 사용되지 않습니다. 이후 버전에서는 더욱 일반화되었습니다.
답변2
일반적으로 프로세스는 실행 중인 프로세스에 의해서만 시작될 수 있습니다. 솔루션은 스크립트 계정의 모든 프로세스가 종료된 경우에만 해당 사용자의 범위를 벗어날 수 있습니다. 그러나 두 가지 상황(루트로 인해 종료되는 경우와 충돌/종료로 인해 종료되는 경우)은 다르게 처리될 수 있습니다.
종료 후 다시 시작
이것은 매우 간단합니다.
#! /bin/bash
while true; do /path/to/script.sh; done
일일 킬 후 다시 시작
- Kill 스크립트는 위의 래퍼 스크립트를 다시 시작합니다.
- 다른 사용자로 실행되는 스크립트는 스크립트가 아직 실행 중인지 주기적으로 확인하고 필요한 경우 다시 시작합니다. 그러나 root 로 실행되지 않는 경우
sudo
/또는 SUID 바이너리가 필요합니다.su