현재 crontab을 통해 쉘 스크립트를 실행하려고 하는데 막혔습니다. 작동하지 않으며 여기서 무엇이 잘못되었는지 모르겠습니다.
내가 하고 싶은 일은 주기적으로 nodejs로 javascript(index.js) 파일을 실행하는 것입니다.
파일은 에 있는 run-logger.sh
실행 파일( -rwxr-xr-x
) 입니다 /home/pi/apps/fritz-client
.
run-logger.sh
:
#!/bin/bash
# execute index.js and save all output to log
/usr/bin/env node /home/pi/apps/fritz-client/index.js >> fritz.log
이 명령을 독립형으로 실행하면 /usr/bin/env node /home/pi/apps/fritz-client/index.js >> fritz.log
모든 것이 잘 작동합니다! 내가 한다고 해도cd /home/pi/apps/fritz-client && ./run-logger.sh
crontab -e
:
#
# lots of comments
#
*/1 * * * * /home/pi/apps/fritz-client/run-logger.sh
crontab -l
표시되기도 합니다.
나는 시도했다:
*/1 * * * * /home/pi/apps/fritz-client/run-logger.sh
*/1 * * * * /bin/bash /home/pi/apps/fritz-client/run-logger.sh
*/1 * * * * /bin/sh /home/pi/apps/fritz-client/run-logger.sh
*/1 * * * * bash /home/pi/apps/fritz-client/run-logger.sh
이 명령의 결과는 more /proc/version
다음과 같습니다.
Linux version 4.1.18-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.9.3 (crosstool-NG crosstool-ng-1.22.0-88-g8460611) ) #846 SMP Thu Feb 25 14:22:53 GMT 2016
고쳐 쓰다
이번이 Linux와 Raspberry Pi를 사용한 첫 주입니다. 그러니 인내심을 가지시기 바랍니다 :)
syslog output
Mar 14 21:08:01 raspberrypi CRON[3609]: (pi) CMD (/home/pi/apps/fritz-client/run-logger.sh)
Mar 14 21:08:01 raspberrypi CRON[3602]: (CRON) info (No MTA installed, discarding output)
Mar 14 21:09:01 raspberrypi CRON[3626]: (pi) CMD (/home/pi/apps/fritz-client/run-logger.sh)
Mar 14 21:09:01 raspberrypi CRON[3619]: (CRON) info (No MTA installed, discarding output)
Mar 14 21:10:01 raspberrypi rsyslogd-2007: action 'action 17' suspended, next retry is Mon Mar 14 21:11:31 2016 [try http://www.rsyslog.com/e/2007 ]
Mar 14 21:10:01 raspberrypi CRON[3642]: (pi) CMD (/home/pi/apps/fritz-client/run-logger.sh)
Mar 14 21:10:01 raspberrypi CRON[3635]: (CRON) info (No MTA installed, discarding output)
Mar 14 21:10:06 raspberrypi crontab[3651]: (pi) BEGIN EDIT (pi)
Mar 14 21:10:19 raspberrypi crontab[3651]: (pi) REPLACE (pi)
Mar 14 21:10:19 raspberrypi crontab[3651]: (pi) END EDIT (pi)
ps aux | grep cron
root 382 0.0 0.2 5548 2452 ? Ss 19:01 0:00 /usr/sbin/cron -f
pi 3683 0.0 0.2 4772 1936 pts/0 S+ 21:11 0:00 grep --color=auto cron
답변1
이를 사용해서는 안 되며, /usr/bin/env
실행 파일을 검색하는 것만으로 충분합니다. 실행 파일의 전체 경로를 지정합니다.node
/bin
/usr/bin/
node
또는 crontab에서 PATH를 확장할 수 있습니다.
PATH=$PATH:/usr/local/bin
등.
답변2
cronjob이 실행 중입니다. 스크립트를 찾아서 실행하는 중입니다 run-logger.sh
. 그렇지 않으면 시스템 로그에 이 내용이 표시됩니다. 그러나 출력이 손상된 메일 받은 편지함으로 전송되고 있습니다. 출력을 볼 수 있도록 MTA가 메일을 보내도록(아마도 로컬로) 수정하세요. 또는 출력이 파일에 수집되도록 cronjob을 수정하십시오.
* * * * * /home/pi/apps/fritz-client/run-logger.sh &>/var/tmp/logger.out
필요하지 않습니다 /1
. 중복됩니다.
stderr에도 기록되도록 node-js 스크립트를 수정합니다.
/usr/bin/env node /home/pi/apps/fritz-client/index.js >> fritz.log 2>&1
여기에 쓸 수 없을 수도 있습니다 fritz.log
. 기본값은 사용자의 홈 디렉터리입니다. 또한 pi
cronjob 사용자이 신가요 ?