약간 반복적으로 들릴 수도 있지만 먼저 내 말을 들어보세요.
활성 stdin이 있고 때로는 시작 시 일부 입력이 필요한 쉘 스크립트를 실행하고 있습니다. 연중무휴 24시간 실행해야 하며 실패 시 명령을 입력하거나 메시지가 표시되면 "y"를 입력하여 다시 시작해야 합니다. 나는 두 가지 방법을 시도했습니다. nohup을 사용하고 Ctrl+Z를 클릭하고 bg를 입력하면 작업이 중지되고 실행되지 않는 것으로 표시됩니다. 실행할 때만 fg
활성화됩니다 . 이 문제를 해결하는 방법에 대한 단서가 있습니까?
PS 저도 해봤는데 scriptcommand &
역시 "중지됨"으로 끝났습니다.
시스템 서비스로 설정하는 것이 합리적입니까?
답변1
설명된 대로 입력에 의존하는 프로그램은 터미널 멀티플렉서 내에서 시작되어야 합니다 tmux
.https://en.wikipedia.org/wiki/Tmux) 또는 screen
(https://www.gnu.org/software/screen/). 터미널 창의 텍스트 기반 버전이라고 생각하세요.
screen my-program
그런 다음 사용할 my-program
수 있습니다.분리키 입력 조합을 사용하면 Ctrl가상 화면 콘솔 에서 시작한 셸로 돌아가지만 프로그램은 여전히 백그라운드에서 실행됩니다 A Ctrl. D그런 다음 를 screen -r
사용하여 가상 콘솔에 다시 연결할 수 있습니다.
화면(및 프로그램)은 프로그램이 종료되거나 서버가 다시 시작될 때까지 계속 실행됩니다.
tmux
매우 유사하지만 더 많은 옵션과 기능이 있고 다른 키보드 단축키를 사용합니다.
답변2
스크립트를 백그라운드에서 계속 실행하려면 nohup: 을 사용하세요 nohup scriptcommand &
. 이상적으로는 스크립트가 입력 메시지를 표시하지 않도록 선택할 수 있습니다. 어떤 이유로든 이것이 옵션이 아닌 경우,예상되는"y"를 입력하는 데 사용할 수 있습니다.
스크립트에 대한 systemd 서비스를 생성하면 시스템 재부팅 시 스크립트가 시작될 수 있습니다. Restart=always
서비스가 종료되거나 종료되면 systemd 파일을 사용하여 서비스를 다시 시작할 수도 있습니다.systemd 문서에 더 많은 정보가 있습니다.