Shell-Script

Linux redhat crontab + 帶參數執行腳本

  • October 7, 2018

我將以下行添加到 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" ?

是的,這樣做是可以的。

crontab(5)手冊

“第六”欄位(該行的其餘部分)指定要執行的命令。該行的整個命令部分,直到換行符或 %字元,都將由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

引用自:https://unix.stackexchange.com/questions/295355