2017-10-04 211 views
0

我想用一些参数作为cron作业来执行脚本。我已经使用crontab -e配置了以下内容的crontab如何在cron中调用脚本时传递参数?

*/2 * * * * /root/todo-api/workspace/docker.sh c4e842c79337 

但它不起作用。当我使用

*/2 * * * * /root/todo-api/workspace/docker.sh 

它的工作。如何在cron中调用脚本时传递参数?这是我的docker.sh脚本,如果我直接从shell执行它,它就可以工作。

CONTAINER=$1  

RUNNING=$(docker inspect --format="{{.State.Running}}" $CONTAINER 2> /dev/null) 

if [ $? -eq 1 ]; then 
    echo "UNKNOWN - $CONTAINER does not exist." 
    exit 3 
fi 

if [ "$RUNNING" == "false" ]; then 
    echo "CRITICAL - $CONTAINER is not running." 
curl -H "Content-type: application/json" -X POST -d '{"routing_key": "3ef61cda125048a390d46cdb8d425590","event_action": "trigger","payload": {"summary": "Docker Container '$CONTAINER' down", "source": "'$CONTAINER'", "severity": "critical" }}' "https://events.pagerduty.com/v2/enqueue" 
    exit 2 
fi 

echo "OK" 
+1

你是如何创建这份工作的? – Cyrus

+3

为什么你在第二种情况下有'''? – Inian

+1

为什么你认为它不起作用? –

回答

1

第一个crontab条目看起来正确。由于没有#! /bin/bash行,因此您可能需要在调用前放置bash,例如

*/2 * * * * /bin/bash /root/todo-api/workspace/docker.sh c4e842c79337 

根据docker inspect

使用

docker inspect [OPTIONS] NAME|ID [NAME|ID...] 

没有$CONTAINER第二次调用一定会失败,因为inspect需要一个名字或S ome id。

要进一步调试,请遵循How to debug a bash script?这个问题,并保留stderr的输出,例如,删除2>/dev/null

相关问题