OS에say
스크립트가 있습니다. 관심 있는 디렉토리를 포함하여 특정 디렉토리에서 스크립트가 작동하는지 확인했습니다. 그러나 대화형 셸(예: Terminal.app, xterm 등 또는 Emacs의 Eshell)에서 실행할 때만 가능합니다. 참고로 스크립트를 cronjob으로 실행할 때 수행하는 작업은 스크립트에서 호출을 한 번만 실행하는 것뿐입니다 . 상자가 닫힐 때까지 say
대화 상자도 없고 반복도 없습니다. 이것이 바로 제가 기대하는 것입니다. say
하지만 내 에는 오류 메시지가 표시되지 않으므로 모든 것이 괜찮다고 생각하는 mail
것 같습니다 .cron
cronjob을 설정하는 방법은 다음과 같습니다.
SHELL=/bin/zsh
*/1 * * * * . $HOME/.zshrc && ps caux | grep -iq my_script && : || $HOME/bin/my_script /some/dir
번역: 1분마다 실행되며 먼저 소싱됩니다 ~/.zshrc
(환경 변수 설정 등 $PATH
). 그런 다음 실행되어 ps caux
내 스크립트의 프로세스 이름을 파악하고 일치하는 항목이 발견되면 아무 작업도 수행하지 않습니다. 그렇지 않은 경우에는 target 을 사용하여 스크립트를 실행합니다 /some/dir
. 내 프로세스가 실행 중인지 확인하는 목적은 겹치는 인스턴스가 발생하지 않는지 확인하고 제대로 작동하는지 확인하는 것입니다.
따라서 터미널에서 이 cronjob에 대한 코드를 실행하면 제대로 작동합니다. 하지만 앞서 설명한 것처럼 cronjob 자체가 예상대로 실행되지 않는 데에는 이유가 있습니다. 이런 유형의 문제에 관해 Google에 문의했을 때 발견한 사실은 다음과 같습니다.SO에 대한 이 질문이것은 내 문제를 반영하는 것 같지만 Linux의 경우입니다. 나는 전에 시도했다수락된 답변거기에는 까지 작업을 시작하려고 한다고 나와 있습니다 xterm
. 즉:
*/1 * * * * . $HOME/.zshrc && xterm -e ps caux | grep -iq my_script && : || $HOME/bin/my_script /some/dir
그러나 이것은 아무 소용이 없습니다. 다시 말하지만, 대화형 셸을 통해 이 cronjob을 실행하는 코드는 예상대로 작동하지만 cron
여전히 자체적으로 스크립트를 이상하게 실행합니다. 유일한 차이점은 xterm
창이 1분마다 표시된다는 것입니다.
왜 이런 일이 발생하는지 혼란스럽습니다. 스크립트가 대화형 셸에서 실행될 때처럼 작동하길 원합니다. 어떻게 해야 하며 cron
스크립트가 예상치 못한 방식으로 실행되는 이유는 무엇입니까?