我有以下脚本:
#!/bin/bash
echo "$(date +"%r")"
if [ "$FOLDER_ID" != "0" ]
then
node /sync.js -d $FOLDER_ID -l /Downloads
fi
我正在使用docker容器,启动容器时已传递env变量FOLDER_ID。在启动Docker容器时,应通过将其传递为ENV来设置此变量。
当我运行此脚本时,node命令将按预期运行,但是当cron作业运行脚本时,它将在处打印日期,但不能正确执行node命令(我认为问题与$ FOLDER_ID有关变量)。
有什么建议吗? 谢谢
答案 0 :(得分:0)
正如一些人在评论中FOLDER_ID
所指出的那样,您需要将其设置在crontab行中吗?
您可以尝试调整crontab行以使用bash -x
调用脚本,或者在脚本顶部附近放置set -x
,这将导致bash在“ print命令及其参数中显示为他们被执行”。如果您收到来自cron的电子邮件,则您应该能够查看该电子邮件并找到类似以下内容的输出:
++ date +%r
+ echo '11:55:41 AM'
11:55:41 AM
+ '[' '' '!=' 0 ']'
+ node /sync.js -d -l /Downloads
...
请注意,以+
开头的行显示了将作为命令执行的bash。
同样值得在bash脚本中添加一些标志来提高严格性,例如:
#!/bin/bash
set -euo pipefail
在这种情况下,-u
标志将导致类似line 5: FOLDER_ID: unbound variable
的情况,并且假设FOLDER_ID
的设置不正确,则退出状态为非零,这有助于突出问题。
Ps值得在自己的行上使用set而不是在哈希爆炸(#!/bin/bash -euo pipefail
)上使用,因为将其分开可以确保使用bash -x
进行调试不会意外关闭预期的标志。