Linux redhat crontab + 带参数运行脚本

Linux redhat crontab + 带参数运行脚本

我将以下行添加到红帽 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 变量中指定的 shell%执行。命令中的字符,除非用反斜杠 ( ) 转义,否则将被更改为换行符,并且第一个字符之后的所有数据都将作为标准输入发送到命令。/bin/shSHELL%\%

答案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 运行此选项时,该选项并未得到执行。好吧,将 /bin/bash 添加到 cronjob 就可以解决这个问题。新的 crontab 是:

0 23 * * * sudo -u myname /bin/bash /home/myname/bin/buildme.sh -f >> /home/myname/log.txt

相关内容