2017-10-04 29 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

相關問題