스크립트를 실행하는 크론 작업이 있습니다. 대화형 셸(ssh에서 bash까지)을 통해 스크립트를 실행하면 제대로 작동합니다. 스크립트가 cron을 통해 자체적으로 실행되면 실패합니다.
내 생각에는 대화형 셸에 설정된 일부 환경 변수를 사용하고 있는 것 같습니다. 스크립트 문제를 해결하고 제거하겠습니다.
변경한 후에는 cron에 스크립트를 대기열에 넣어 정상적으로 실행되도록 할 수 있다는 것을 알고 있지만명령줄에서 스크립트를 실행하는 방법이 있지만 마치 cron에서 실행되는 것처럼(예: 비대화형 환경에서) 실행되도록 지시할 수 있나요?
답변1
cron에서 명령을 실행하는 것과 명령줄에서 명령을 실행하는 것의 주요 차이점은 다음과 같습니다.
- cron은 다른 쉘(보통
/bin/sh
)을 사용할 수 있습니다. - cron은 확실히 소규모 환경에서 실행됩니다(환경은 cron 구현에 따라 다르므로 매뉴얼 페이지를 확인하세요. 일반적으로
cron(8)
Maybe , Maybe , Maybe 및 소규모 환경 만 해당 ).crontab(5)
HOME
SHELL
LOGNAME
USER
PATH
- cron은
%
이 문자를 특별하게 처리합니다(개행 문자로 변환). - 크론 작업을 실행하기 위해 터미널이나 그래픽 환경이 필요하지 않습니다.
다음 호출은 cron에서 호출된 것처럼 쉘 조각을 실행합니다. 조각에 문자 '
또는 가 포함되어 있지 않다고 가정합니다 %
.
env - HOME="$HOME" USER="$USER" PATH=/usr/bin:/bin /bin/sh -c 'shell snippet' </dev/null >job.log 2>&1
당신은 또한 볼 수 있습니다cron에서 sh 스크립트 실행, 문제 해결에 도움이 될 수 있습니다.
답변2
비대화형 셸에서 스크립트를 실행하려면(세부 사항에 관계없이 cron
) 를 통해 수행할 수 있습니다 ssh
.
실제로 비대화형 쉘에 들어가고 있는지 테스트하십시오.
> ssh someuser@somehost tty
not a tty
비대화형 셸에서 스크립트를 실행합니다.
> ssh someuser@somehost /tmp/myscript.sh
답변3
@sr_의 링크(ksh 쉘에서 깨끗한 환경을 얻는 방법은 무엇입니까?), 환경을 찾아봤는데 다음을 시도해 볼 수도 있습니다.
env -i ./my-script.sh
답변4
스크립트를 cron에 넣고 다른 곳에서 사용할 때는 절대 경로를 사용하는 것이 좋습니다. 그리고 거기에서 사용되는 모든 Linux 명령에 대해서는 변수로 선언하고 사용하는 것이 가장 좋습니다!