Red Hat crontab에 다음 줄을 추가했습니다.
스크립트를 실행하려면/var/scripts/info_from_all_sites.bash매주 금요일저녁 00:00
스크립트는 /var/RT/names.txt 파일을 매개변수로 가져와야 합니다.
따라서 스크립트는 이 파일의 모든 정보를 읽습니다.
0 0 * * 5 /var/scripts/info_from_all_sites.bash /var/RT/names.txt 1>/dev/null 2>&1
내 질문은 - crontab의 스크립트에 파일을 매개변수로 추가해도 괜찮습니까?
아니면 파일을 큰따옴표로 묶어야 할 수도 있습니다.
0 0 * * 5 /var/scripts/info_from_all_sites.bash "/var/RT/names.txt" ?
답변1
예, 이렇게 해도 괜찮습니다.
~에서crontab(5)
수동:
"여섯 번째" 필드(줄의 나머지 부분)는 실행할 명령을 지정합니다. 행의 전체 명령 부분(개행 문자 또는 문자까지)은 cronfile 변수에 지정된 쉘에 의해 실행됩니다
%
. 백슬래시( )로 이스케이프하지 않는 한 명령의 문자는 개행 문자로 변경되고 첫 번째 문자 이후의 모든 데이터는 표준 입력으로 명령에 전송됩니다./bin/sh
SHELL
%
\
%
답변2
다음 crontab을 사용하여 동일한 문제가 발생했습니다.
0 23 * * * sudo -u myname /home/myname/bin/buildme.sh -f >> /home/myname/log.txt
Bash 스크립트에서는 이것을 사용하여 -f 옵션을 얻습니다.
while getopts ":f" opt; do
case $opt in
f)
force_full=1
;;
\?)
echo "Invalid option: -$OPTARG" >&2
;;
esac
done
그래서 어떤 이유로 cron을 통해 이것을 실행했을 때 옵션이 실행되지 않는다는 것을 알았습니다. 음, cronjob에 /bin/bash를 추가하면 이 문제가 해결됩니다. 새로운 크론탭은 다음과 같습니다:
0 23 * * * sudo -u myname /bin/bash /home/myname/bin/buildme.sh -f >> /home/myname/log.txt