Bash 스크립트는 수동으로 실행할 수 있지만 cron은 작동하지 않습니다. + 우분투 16.04

Bash 스크립트는 수동으로 실행할 수 있지만 cron은 작동하지 않습니다. + 우분투 16.04

환경:- 우분투 18.04

나는 C 프로그램을 작성하고 포트와 통신하여 일부 데이터를 가져와 파일에 덤프하려고 했습니다. 그런 다음 bash 스크립트를 만들고 이 C 프로그램을 추가했으며 여러 간격으로 실행될 것으로 예상했습니다.

이 bash 스크립트를 아무 문제 없이 실행할 수 있습니다. 나는 루트로 실행 중입니다.

<<snip>>
#!/bin/bash
interval=$1
time=$2
./CC-test $interval $time 
<<snip>> 

cron을 통해 특정 명령을 호출할 때 권한 위임 문제가 있는지 궁금합니다. 아니면 cron에게 관리 권한으로 실행하도록 지시해야 합니까? 어쨌든 나는 cron을 루트로 실행합니다. 다른 필요가 있으면 그렇게 생각하지 않습니다.

테스트로 아래와 같이 쉘 스크립트에서 두 가지 명령을 시도했습니다.

 #!/bin/bash
 date >> test
 fdisk -l >> test

여기서도 수동으로 실행할 수 있으며 두 출력 모두 문제 없이 인쇄됩니다. 여기에서는 테스트 파일에 인쇄된 "date" 명령 출력에 대해 cron에 넣었습니다.

이에 대해 몇 가지 생각을 해주시기 바랍니다.

답변1

크론병악마항상 루트로 실행하십시오. 크론병일하다자신이 속한 cronjob의 사용자로 실행됩니다. crontab -eas user 를 사용하여 크론 작업을 추가 하면 해당 작업은 루트가 아닌 johnuser 로 실행됩니다 .john

루트의 크론 작업을 편집하려면 를 사용하십시오 sudo crontab -e.

대화형 명령줄에서 명령을 실행하는 것과 cron 작업에서 명령을 실행하는 것의 차이점은 환경(환경 변수, 현재 작업 디렉터리 등)이 다를 수 있다는 것입니다. 이상적으로 cron 작업은 필요한 변수를 올바른 값으로 명시적으로 설정해야 합니다. 예를 들어 PATH비표준 경로에서 타사 유틸리티를 사용하는 경우 cron에서 실행되는 스크립트에 일부 변수 경로를 추가해야 할 수 있으며 cd나머지 스크립트에 대한 작업 디렉터리를 설정하기 위해 올바른 디렉터리로 이동 해야 할 수도 있습니다. (예를 들어, 귀하의 예에서 실행하면 올바른 디렉토리에 있습니다 ./CC-test).

관련 정보