![cron을 사용하여 실행할 때와 쉘 스크립트를 수동으로 실행할 때 출력이 다른 이유는 무엇입니까? [복사]](https://linux55.com/image/32990/cron%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%8B%A4%ED%96%89%ED%95%A0%20%EB%95%8C%EC%99%80%20%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%88%98%EB%8F%99%EC%9C%BC%EB%A1%9C%20%EC%8B%A4%ED%96%89%ED%95%A0%20%EB%95%8C%20%EC%B6%9C%EB%A0%A5%EC%9D%B4%20%EB%8B%A4%EB%A5%B8%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
foo.sh
다음과 같은 매우 간단한 쉘 스크립트( )가 있습니다 .
#!/bin/bash
echo -n "$USER,$(date)," `binary -flags | sed -e '1,30d'`;
exit 0;
스크립트는 일부 출력을 준비한 후 다음과 같이 텍스트 파일에 추가해야 합니다.
foo.sh >> data.csv
루트 프롬프트에서 위의 명령을 실행하면 정상적으로 작동합니다. 그러나 내 (루트) crontab에 똑같은 명령을 입력하면 다음과 같습니다.
05 * * * * /root/foo.sh >> /path/to/data.csv
crontab 출력이 다릅니다! 나는 이것을 기대하지 않았고 왜 그런지 이해하지 못합니다. 아래 예를 참조하세요.
Expected, normal output from running my .sh (example):
Fri Jun 14 16:32:34 CEST 2013,20130614163304,268828672,71682561
The output written to the file by cron:
Fri Jun 14 16:32:34 CEST 2013,
.sh에서 바이너리를 실행하기 위한 권한은 다음과 같습니다.
-rwxr-xr-x 1 root root
출력이 다른 이유는 무엇입니까? 내 CSV 파일에 올바른 출력을 넣으려면 어떻게 해야 합니까?
답변1
같은 것을 기대할 수는 없습니다환경cron
프로그램에서는 대화형으로 실행됩니다. 이 경우 두 가지 차이점이 중요할 수 있습니다.
현재 작업 디렉토리
이것
PATH
위에서 언급한 것처럼 jordanm
, 둘 중 하나 또는 둘의 조합으로 인해 스크립트가 binary
프로그램을 찾지 못하게 됩니다.
로컬 시스템 메일을 확인하면(예: 를 실행하여 mailx
) 이 실패에 대해 불평하는 메시지를 찾을 수 있습니다.
crontab
실행할 항목과 스크립트를 작성할 때 cron
알려진 프로그램 위치에 대한 경로를 하드코딩하는 것이 표준 관행입니다.