2015-01-07 2 views
2

매주 실행하려는 csh로 작성된 스크립트가 있습니다.csh에서 cronjob 실행

나는 cronjob을 사용해 보았지만 cronjob이 내 스크립트를 sh에서 실행하려고 했으므로 제대로 작동하지 않는 것 같습니다.

스크립트가 cronjob에서 제대로 실행되는지 확인하거나 cronjob을 사용하지 않고 수행하려는 작업을 수행 할 수있는 다른 방법이 있습니까?

내 cron 작업은 다음과 같은 :

0 0 * * 6 source ~/cron_job 

~/cron_job는 다음과 같은 :

#!/bin/csh 
source ~/.cshrc; 
source ~/test_setup; 
source ~/start_test 

이 또한주의하는 것이 아니라 cron 작업이 작동되지 않는 터미널 작품에 직접 source ~/cron_job를 실행. 나는 다음과 같은 얻을 오류 :

/bin/sh: source ~/cron_job : No such file or directory 
+0

Maby이 정보는 도움이 될 수 있습니다. http://www.dbforums.com/showthread.php?1094952-How-to-change-the-invoking-shell-for-CRON-%28from-sh-to-csh%29 – user1766169

+1

우리는 더 많은 정보가 필요합니다. 당신의 crontab 라인은 어떻게 생겼습니까? 스크립트가 실행 가능합니까? 적절한'#!'줄로 시작합니까? 이 정보를 제공하려면 질문을 업데이트하십시오. –

+0

@Keith 내 질문을 업데이트했습니다. 감사!! –

답변

3
0 0 * * 6 source ~/cron_job 

이 시도 또는 "소스"현재 스크립트에서 파일을 "포함"; 이는 여러 가지 이유로 잘못되었습니다.

  1. csh 스크립트 원본을 보내려고합니다.
  2. 그것은 cron 당신이 별도의 프로그램, 현재 스크립트 (아마도 그것은 일이, 내가 시도하지 않습니다에서하지 source 뭔가를 실행 할 것으로 예상하는 sh 스크립트 수 있지만 두 개의 스크립트를 같은이 sourcing 무언가를 고려할 경우에도 .! 변수 나 함수 이름은 아차)

올바른 방법은 다음과 같습니다

0 0 * * 6 csh -f ~/cron_job 

이것은 csh을 시작합니다; -f은 스타트 업 파일을로드하지 못하도록하여 때로는 스크립트 실행을 방해 할 수 있습니다.

+1

'~/cron_job'에'#!/bin/csh -f'를 넣고 crontab 파일에서'~/cron_job'을 호출하는 것이 더 낫습니다. –

+0

감사합니다 !! 그것은 효과가 있었다. –

-1

이 동작의 가장 큰 원인은 /etc/profile 파일에 bourne 셸이 구성되어 있다는 것입니다.

크론 (8)이 경우 다른 쉘을 사용할 수 있도록 (?) 작업, 당신은 하위 프로세스에서 할 수있는 의 crontab을 실행하기 위해 사용하는 쉘을 선택하여 /etc/profile 데이터를 사용하여, 소스를 사용하지 않습니다.

다른 방법은 CSH (1)로 전환SH (1) 대신 사용한다.

+1

최소한 Vixie cron (대부분의 Linux 배포판에서 사용되는 버전)에서'cron'은'/ bin/sh' 또는 crontab 파일의'SHELL' 변수로 지정된 쉘을 사용하여 명령을 실행합니다. '/ etc/profile'은 일반적으로 쉘을 지정하는 데 사용되지 않습니다. 각 사용자의 로그인 쉘은'/ etc/passwd' 또는 동등한 것으로 지정되어 있지만 여전히'cron'이 명령을 실행하는 방법에는 영향을 미치지 않습니다. –