2016-08-14 3 views
-1

파일에서 데이터를 선택하고 (임계 값을 충족시키는 경우)이 데이터를 다른 파일에 전달하는 bash 프로그램이 있습니다. bash 스크립트 안에 smaoutput-analyse.sh라는 PHP 스크립트가 있습니다. 쉘에서 실행하면 완벽하게 작동합니다. 루트로 cron 작업으로 실행될 때 올바른 실행되지만 출력이 없습니다.bash 스크립트는 명령 행에서 실행하지만 cron에서는 실행되지 않습니다.

# Every minute result of SMA 
*/1 8-22 * * * /home/pi/scripts/SBFspot.sh > /home/pi/test/smaoutput.txt 2>&1 
# afterwards read and save in file 
*/1 10-20 * * * /home/pi/test/smaoutput-analyse.sh > /dev/null 2>&1 
(전술 한 바와 같이) 여기

#!/usr/bin/php 
<?php 
echo " Programm to read smaoutput.txt",PHP_EOL; 
// etc etc 
`if(!file_put_contents("sma_saved_data.txt",$sma_saved_data_string,FILE_APPEND)){ 
// failure 
    echo "error opening the file sma_saved_data.txt for writing",PHP_EOL; 
    } 
// etc etc 
?> 

는 crontab을 선이다 FOM을 쉘을 실행할 때 여기

올바르게 추가 정보이다 grep -i cron /var/log/syslog

 
Aug 14 16:06:01 raspberrypi CRON[6705]: (root) CMD (/home/pi/scripts/SBFspot.sh > /home/pi/test/smaoutput.txt 2>&1) 
Aug 14 16:06:01 raspberrypi CRON[6706]: (root) CMD (/home/pi/test/smaoutput-analyse.sh > /dev/null 2>&1) 

로부터 출력

파일 권한을 + rw로 설정하고 + rwx로 설정했다고 생각합니다. bash는

내가 그리워 했는가

+0

매우 제한된 환경에서 실행되는 Cron 스크립트는'PATH'와 다른 환경 변수가 예상과 다를 수 있음을 의미합니다. 작업 디렉토리는 예상 한 것과 다를 가능성이 있습니다. –

+0

'sma_saved_data.txt'를 파일을 저장할 위치의 절대 경로로 바꿉니다. –

답변

0

당신은 다음과 같은 문제가 확인해야합니다 :

  • 모든 환경 변수를 동일하게인가를? 따라서 printenv을 bash에서 호출하여 cron-job을 작성하십시오. */1 8-22 * * * printenv> /tmp/printenv.txt -> /tmp/printenv.txt 파일의 출력을 bash의 printenv와 비교하십시오
  • 동일한 사용자 및 동일한 권한으로 실행하고 있습니까? echo "$ USER"을 실행하고 cron-job을 생성하십시오. */1 8-22 * * * echo "$ USER"> /tmp/user.txt ->/tmp/user 파일의 출력을 비교하십시오. tash와 echo "$ USER"from bash
  • 스크립트를 실행하는 경로를 확인하십시오. pwd을 bash에서 호출하여 cron-job을 작성하십시오. */1 8-22 * * * pwd> /tmp/pwd.txt -> /tmp/pwd.txt 파일의 출력을 pwd의 출력과 비교하십시오 bash에서
0

흥미 진진한 Realy. 이것은 첫 번째 게시물이었고 신속한 응답을 받았습니다. 감사합니다.

해결책은 간단합니다. 파일을 저장할 위치의 전체 경로를 제공하십시오. 비고 : 모든 것이 실행되도록 shure하기 위해 나는 crontab을 루트 crontab에두고 사용자 crontab에는 넣지 않는다. 아마도 "똑똑한 생각"이지만 똑똑한 연기는 아닙니다. 루트 cronjob 아이디어에 대한 의견을 얻으실 수있어서 고맙겠습니다.

bash와 cron에서 printenv, echo "& USER"및 pwd를 실행하는 것에 대한 게시물이 흥미 롭습니다.

bash의 printenv는 SHELL =/bin/bash, SSH_CLIENT, SSH_TTY와 같은 많은 정보를 제공합니다.MAIL, PATH, SSH_CONNECTION 그리고 LS_COLORS로 시작하는 많은 것들, cron의 printenv는 단지 6 줄입니다. HOME =/root, LOGNAME = root, PATH =/usr/bin, LANG = en_GB, UTF-8, SHELL =/bin/sh 및 PWD =/루트

에코 떠들썩한 파티에서 "& 사용자는"크론에서 빈 파일을 제공하는 동안, 파이를 제공

배쉬에서 PWD는/집/PI/테스트 및 크론에서/루트를 제공

이러한 결과를 이해할 수 있습니다.

나는 cronjob을 사용자 root가 아닌 사용자 root로 만들어야한다는 것을 알 수 있습니까?

관련 문제