我有一个计划每天运行的 cron 作业,除了更改计划之外,还有没有其他方法可以立即对命令进行测试运行以查看它是否按预期工作?
编辑:(从评论中)我知道在 shell(我的 shell)中输入命令时该命令可以正常工作,但是我想知道当 cron 运行它时它是否可以正常工作,它可能会受到 ENV 或特定于 shell 的东西的影响(~扩展) 或所有权和许可的东西或...
我的系统管理员在我的机器上设置了一堆 cron 作业。我想知道确切的时间安排。我怎样才能得到那个清单?
我有一个脚本,当我从命令行运行它时cron,它可以工作,但是当我用它来安排它时,我收到了找不到文件或命令的错误。我的问题是双重的:
当我使用 调度 cron 作业时crontab -e,它是否使用我的用户 ID 作为其权限的基础?或者它是否使用某种类型的 cron 用户 ID 及其相关权限?
启动 cron 作业时,工作目录是什么?它是我指定要运行的脚本的目录,还是其他目录?
这是我的 cron 工作:
15 7 * * * /home/xxxx/Documents/Scripts/email_ip_script.sh
Run Code Online (Sandbox Code Playgroud)
这是实际的脚本:
vIP_ADDR="`curl automation.whatismyip.com/n09230945.asp`"
echo "$vIP_ADDR"
sed "s/IPADDR/$vIP_ADDR/g" template.txt > emailmsg.txt
ssmtp XXXXX@gmail.com < emailmsg.txt
Run Code Online (Sandbox Code Playgroud)
以下是我在查看由mail产生的消息时得到的错误cron:
sed: can't read template.txt: No such file or directory
/home/xxxx/Documents/Scripts/email_ip_script.sh: line 15: ssmtp: command not found
Run Code Online (Sandbox Code Playgroud)
它找不到,template.txt但它与脚本位于同一目录中。它也不能运行ssmtp,但我可以作为我的用户。我缺少什么才能使其正常工作?
如果我cron错误地设置作业,它们似乎会默默地失败。我应该在哪里查找错误日志以了解出了什么问题?
我想为日志文件名中包含当前小时的 cron 脚本创建一个日志文件。这是我尝试使用的命令:
0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log
Run Code Online (Sandbox Code Playgroud)
不幸的是,我在运行时收到此消息:
/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)
我曾尝试date以各种方式逃避该部分,但运气不佳。是否可以在 crontab 文件中内嵌进行此操作,或者我是否需要创建一个 shell 脚本来执行此操作?
我正在阅读一篇关于crontab的文章
有一些关于禁用自动发送电子邮件的功能。
禁用电子邮件 默认情况下,cron 作业会向执行 cronjob 的用户帐户发送一封电子邮件。如果不需要,请将以下命令放在 cron 作业行的末尾。
Run Code Online (Sandbox Code Playgroud)>/dev/null 2>&1
2 > &和的详细意思是1什么?为什么将其放在 crontab 文件的末尾会关闭电子邮件发送功能?
我有一个备份脚本,我需要在一天的特定时间运行它,所以我正在使用cron这个任务,并且从 cron 中我也试图将备份脚本的输出重定向到logfile.
crontab -e
*/1 * * * * /home/ranveer/backup.sh &>> /home/ranveer/backup.log
Run Code Online (Sandbox Code Playgroud)
在上面的 cron 条目中,我将两者都重定向stderr and stdout到日志文件。
上面的 cron 作业执行得很好syslog  ,它执行backup.sh文件中提到的任务,但它没有向日志文件写入任何内容。
/var/log/syslog
Oct 19 20:26:01 ranveer CRON[15214]: (ranveer) CMD (/home/ranveer/backup.sh &>> /home/ranveer/backup.log)
Run Code Online (Sandbox Code Playgroud)
当我从 cli 运行脚本时,它会按要求工作并将输出写入日志文件
ranveer@ranveer:~$ ./backup.sh &>> backup.log 
ranveer@ranveer:~$ cat backup.log
Fri Oct 19 20:28:01 IST 2012
successfully copied testdir
test.txt successfully copied
-------------------------------------------------------------------------------------
ranveer@ranveer:~$ 
Run Code Online (Sandbox Code Playgroud)
那么,为什么文件的输出没有从 cron 中重定向到文件。
如何使用现有环境变量运行 cron 命令?
如果我在 shell 提示符下,我可以输入echo $ORACLE_HOME并获取路径。这是在我的~/.profile. 但是,似乎~/.profile没有从 cron 脚本加载,因此我的脚本失败,因为$ORACLE_HOME未设置变量。
在这个问题中,作者提到创建一个~/.cronfile配置文件,为 cron 设置变量,然后他做了一个解决方法,将他的所有 cron 命令加载到他保存在他~/Cron目录中的脚本中。像~/.cronfile这样的文件听起来是个好主意,但其余的答案似乎有点麻烦,我希望有人能告诉我一种更简单的方法来获得相同的结果。
我想在我的脚本开始时我可以添加类似的东西,source ~/.profile但这似乎是多余的。
那么我怎样才能让我的 cron 脚本从我的交互式 shell 配置文件中加载变量呢?
星期几:允许的范围是 0 – 7。星期日是 0 或 7。
我在谷歌搜索后发现了这个,我的问题是为什么两个值 (0,7) 都对应于星期日?
最近有人向我指出,存在 cron 的替代方案,即 systemd 计时器。
但是,我对 systemd 或 systemd 计时器一无所知。我只用过 cron。
Arch Wiki 中有一些讨论。但是,我正在寻找cronsystemd 计时器和 systemd 计时器之间的详细比较,重点是利弊。我使用 Debian,但我想对所有提供这两种替代方案的系统进行一般比较。该集合可能仅包括 Linux 发行版。
这是我所知道的。
Cron 非常古老,可以追溯到 1970 年代后期。cron 的原作者是 Unix 的创造者 Ken Thompson。Vixie cron 可追溯到 1987 年,现代 Linux 发行版中的 cron 是其中的直系后代。
Systemd 更新很多,也有些争议。维基百科告诉我它的初始版本是 2010 年 3 月 30 日。
因此,我目前的 cron 相对于 systemd 计时器的优势列表是:
Cron 保证可以在任何类 Unix 系统中使用,因为它是一个可安装的受支持软件。这不会改变。相比之下,systemd 将来可能会或可能不会保留在 Linux 发行版中。它主要是一个 init 系统,可能会被不同的 init 系统取代。
Cron 使用起来很简单。绝对比 systemd 计时器简单。
systemd 计时器相对于 cron 的相应优势列表是:
因此,总而言之,以下是一些最好在答案中看到的内容: