Shell-Script
Linux redhat crontab + 帶參數執行腳本
我將以下行添加到 red-hat crontab
為了在每個星期五晚上00:00執行腳本****/var/scripts/info_from_all_sites.bash
腳本應該將文件作為參數 - /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" ?
是的,這樣做是可以的。
“第六”欄位(該行的其餘部分)指定要執行的命令。該行的整個命令部分,直到換行符或
%
字元,都將由cronfile/bin/sh
的變數中指定的 shell執行。SHELL
命令中的%
字元,除非使用反斜杠 (\
) 轉義,否則將更改為換行符,並且第一個字元之後的所有數據%
都將作為標準輸入發送到命令。
我在使用以下 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 執行此選項時,該選項沒有被兌現。好吧,將 /bin/bash 添加到 cronjob 可以解決問題。新的 crontab 是:
0 23 * * * sudo -u myname /bin/bash /home/myname/bin/buildme.sh -f >> /home/myname/log.txt