Crontab 无法运行脚本?

Crontab 无法运行脚本?

我整天都在谷歌上搜索并查看这个。我觉得我忽略了一些显而易见的东西。在 Linux 方面我还是个新手,在 cron 方面更是如此。你们这些大师能帮我找到解决方案吗?

cron 条目

1 * * * * /data/cronScripts/weeklyPageCreate.sh

我希望它每分钟运行一次以确认它是否会运行。到目前为止,我还没有看到任何错误出现/var/log/cron

脚本本身

#!/bin/bash

DATE_TODAY=$(/bin/date +'%Y-%m-%d')
DATE_TODAYMINUSFIVE=$(/bin/date +'%Y-%m-%d' -d '7 day ago')
#echo $DATE_TODAY
#echo $DATE_TODAYMINUSFIVE

curl -u 'user':'pass' -X POST -H 'Content-Type: application/json' -d '{"type":"page","title":"Weekly Report ('$DATE_TODAY')","ancestors":[{"id":316048939}], "space":{"key":"ITC"},"body":{"storage":{"value":"<ac:structured-macro ac:name=\"hideelements-macro\" ac:schema-version=\"1\"><ac:parameter ac:name=\"metas\">true</ac:parameter><ac:parameter ac:name=\"comments\">true</ac:parameter><ac:parameter ac:name=\"edit\">true</ac:parameter><ac:parameter ac:name=\"watch\">true</ac:parameter><ac:parameter ac:name=\"create\">true</ac:parameter><ac:parameter ac:name=\"favorite\">true</ac:parameter><ac:parameter ac:name=\"labels\">true</ac:parameter><ac:parameter ac:name=\"likes\">true</ac:parameter></ac:structured-macro><h1>B2B</h1><ac:structured-macro ac:name=\"jira\" ac:schema-version=\"1\"><ac:parameter ac:name=\"server\">JIRAAPPLINK</ac:parameter><ac:parameter ac:name=\"columns\">key,summary,created,assignee,reporter,resolution</ac:parameter><ac:parameter ac:name=\"maximumIssues\">20</ac:parameter><ac:parameter ac:name=\"jqlQuery\">project = AND resolved >= '$DATE_TODAYMINUSFIVE' AND resolved &lt;= '$DATE_TODAY' </ac:parameter><ac:parameter ac:name=\"serverId\">d9064433-ee34-3ef3-8b28-1606bcb513a1</ac:parameter></ac:structured-macro><h1>Data</h1><ac:structured-macro ac:name=\"jira\" ac:schema-version=\"1\"><ac:parameter ac:name=\"server\">JIRAAPPLINK</ac:parameter><ac:parameter ac:name=\"columns\">key,summary,created,assignee,reporter,resolution</ac:parameter><ac:parameter ac:name=\"maximumIssues\">20</ac:parameter><ac:parameter ac:name=\"jqlQuery\">project = AND resolved >= '$DATE_TODAYMINUSFIVE' AND resolved &lt;= '$DATE_TODAY' </ac:parameter><ac:parameter ac:name=\"serverId\">d9064433-ee34-3ef3-8b28-1606bcb513a1</ac:parameter></ac:structured-macro><h1>SalesForce</h1><ac:structured-macro ac:name=\"jira\" ac:schema-version=\"1\"><ac:parameter ac:name=\"server\">JIRAAPPLINK</ac:parameter><ac:parameter ac:name=\"columns\">key,summary,created,assignee,reporter,resolution</ac:parameter><ac:parameter ac:name=\"maximumIssues\">20</ac:parameter><ac:parameter ac:name=\"jqlQuery\">project =  AND resolved >= '$DATE_TODAYMINUSFIVE' AND resolved &lt;= '$DATE_TODAY' </ac:parameter><ac:parameter ac:name=\"serverId\">d9064433-ee34-3ef3-8b28-1606bcb513a1</ac:parameter></ac:structured-macro><h1>Oracle</h1><ac:structured-macro ac:name=\"jira\" ac:schema-version=\"1\"><ac:parameter ac:name=\"server\">JIRAAPPLINK</ac:parameter><ac:parameter ac:name=\"columns\">key,summary,created,assignee,reporter,resolution</ac:parameter><ac:parameter ac:name=\"maximumIssues\">20</ac:parameter><ac:parameter ac:name=\"jqlQuery\">project = Oracle AND resolved >= '$DATE_TODAYMINUSFIVE' AND resolved &lt;= '$DATE_TODAY' </ac:parameter><ac:parameter ac:name=\"serverId\">d9064433-ee34-3ef3-8b28-1606bcb513a1</ac:parameter></ac:structured-macro><ac:structured-macro ac:name=\"previous-next-navigation\" ac:schema-version=\"1\"><ac:parameter ac:name=\"next-button-text\">Next Week</ac:parameter><ac:parameter ac:name=\"previous-button-text\">Previous Week</ac:parameter><ac:parameter ac:name=\"button-style\">Primary</ac:parameter><ac:parameter ac:name=\"parent-button-text\">Directory</ac:parameter></ac:structured-macro>","representation":"storage"}}}' https://site.domain.com/rest/api/content | python -mjson.tool

这在命令行上运行得很好,我已经chmod +x使用它了。

我想这是一个附带问题。有/etc/crontab,然后你可以用 编辑 crontab crontab -e,但区别是什么?两者都总是运行吗?你把作业放在其中一个而不是另一个中有什么原因吗?

答案1

你的脚本可能没问题!

您的 crontab 指令不正确:

1 * * * * /data/cronScripts/weeklyPageCreate.sh不会每分钟运行一次。

A数字任何列都代表 cronjob 计划运行的具体分钟/小时/天/月/星期几。

*表达式是代表“全部”或“每个”的符号

因此1 * * * *实际上会安排作业在所有工作日、所有月份、每天和每小时的第一分钟运行。 即 4:01;5:01;6:01

如果您希望作业每分钟运行一次,则可以使用符号* * * * *。这意味着作业将安排在所有工作日、所有月份、每天和每小时的每一分钟。

如果您希望脚本每分钟运行一次,则完整的 crontab 行应为:

* * * * * /data/cronScripts/weeklyPageCreate.sh

如果您以后需要帮助解读 crontab 符号,请使用您最喜欢的搜索引擎并搜索“crontab 计算器”。有很多!

答案2

我总是确保你将脚本输出到脚本日志中,例如

1 * * * * /data/cronScripts/weeklyPageCreate.sh >> /path/to/weeklyPageCreate.log 2>&1

这样,您就可以记录该脚本的所有错误/消息,以查看它是否正在运行或导致错误。

cron 的一个常见问题是环境与用户 shell 环境不同,因此在 cron 中运行脚本时,shell 中可能存在的环境变量将不存在。因此,您的脚本可能需要明确设置变量或源脚本来设置变量等。

请参阅底部的 cron“陷阱”: https://www.pantz.org/software/cron/croninfo.html

相关内容