使用crontab运行带参数的脚本

时间:2014-05-15 15:24:11

标签: linux bash shell sh crontab

我知道这可能在之前的各个帖子中得到了回答,但我自己也无法做到这一点。

我有一个bash脚本(service.sh)我想每分钟运行一次。它需要传递一个参数(在这种情况下, start )。

使用另一个脚本(test.sh)我正在安排上述脚本的cron表达式:

echo "* * * * * /opt/service.sh start" > /opt/cronForSecops
crontab /opt/cronForSecops

我可以通过使用 crontab -l <​​/ em>看到这被正确设置为:

* * * * * /opt/service.sh start

但是, service.sh 没有运行,我看到没有创建日志/文件( service.sh 文件应该这样做,当我正常运行。)

有人可以指导我出错的地方吗?

2 个答案:

答案 0 :(得分:1)

尝试使用以下内容创建名为/opt/start-service.sh的简单包装脚本:

#!/bin/sh
/opt/service.sh start

并确保它是可执行的,然后使用

* * * * * /opt/start-service.sh

作为crontab条目

答案 1 :(得分:1)

我在使用以下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

希望有帮助!