如何在cron中调用脚本时传递参数?
问题描述:
我想用一些参数作为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"
答
第一个crontab条目看起来正确。由于没有#! /bin/bash
行,因此您可能需要在调用前放置bash,例如
*/2 * * * * /bin/bash /root/todo-api/workspace/docker.sh c4e842c79337
使用
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
没有$CONTAINER
第二次调用一定会失败,因为inspect
需要一个名字或S ome id。
要进一步调试,请遵循How to debug a bash script?这个问题,并保留stderr的输出,例如,删除2>/dev/null
。
你是如何创建这份工作的? – Cyrus
为什么你在第二种情况下有'''? – Inian
为什么你认为它不起作用? –