비대화형 쉘에서 스크립트를 실행하시겠습니까?

비대화형 쉘에서 스크립트를 실행하시겠습니까?

스크립트를 실행하는 크론 작업이 있습니다. 대화형 셸(ssh에서 bash까지)을 통해 스크립트를 실행하면 제대로 작동합니다. 스크립트가 cron을 통해 자체적으로 실행되면 실패합니다.

내 생각에는 대화형 셸에 설정된 일부 환경 변수를 사용하고 있는 것 같습니다. 스크립트 문제를 해결하고 제거하겠습니다.

변경한 후에는 cron에 스크립트를 대기열에 넣어 정상적으로 실행되도록 할 수 있다는 것을 알고 있지만명령줄에서 스크립트를 실행하는 방법이 있지만 마치 cron에서 실행되는 것처럼(예: 비대화형 환경에서) 실행되도록 지시할 수 있나요?

답변1

cron에서 명령을 실행하는 것과 명령줄에서 명령을 실행하는 것의 주요 차이점은 다음과 같습니다.

  • cron은 다른 쉘(보통 /bin/sh)을 사용할 수 있습니다.
  • cron은 확실히 소규모 환경에서 실행됩니다(환경은 cron 구현에 따라 다르므로 매뉴얼 페이지를 확인하세요. 일반적으로 cron(8)Maybe , Maybe , Maybe 및 소규모 환경 만 해당 ).crontab(5)HOMESHELLLOGNAMEUSERPATH
  • 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 명령에 대해서는 변수로 선언하고 사용하는 것이 가장 좋습니다!

관련 정보