根据我的理解,您可以通过编辑来编写您的 crons
crontab -e
Run Code Online (Sandbox Code Playgroud)
我发现有几个来源在 cron 作业中引用了 bash 脚本,而不是为行编写作业行。
您可以使用 bash 脚本将许多任务合并为一个 cron 作业的唯一好处是什么?
新手的附加问题:编辑 crontab -e 指的是一个文件正确吗?我注意到,如果我打开 crontab -e 并关闭而不进行编辑,当我再次打开文件时,会有不同的数字扩展名,例如:
"/tmp/crontab.XXXXk1DEaM" 0L, 0C
Run Code Online (Sandbox Code Playgroud)
我虽然 crontab 存储在 /var/spool/cron 或 /etc/crontab 中?
为什么它将 cron 存储在 tmp 文件夹中?
这取决于你在做什么工作。
cron 没有给你一个真正的脚本环境,所以,如果你做的事情比简单地调用几个命令更复杂,你可能想使用 cron 来调用脚本。您还可以在脚本中处理诸如变量扩展之类的事情,这在 cron 环境中即使不是不可能也很难做到。
您在运行时看到crontab -e
的临时文件就是:一个在您退出编辑器会话后将被清除的临时文件。您通过此方法编辑的实际 crontab 会在 /var/spool/cron 中结束。
实际上,由于这些是相对基本的特定于 unix 的问题,因此在unix.stackexchange.com方面可能会更有帮助。
好的,对于第一个问题:有几个原因可以为您的 cronjob 使用 bash 脚本:
正如您所提到的,您可以将许多命令合并到一个 bash 脚本中。这比将一个巨大的 crontab 行聚集在一起更具可读性,尤其是因为逻辑流程更加明显。相比:
command1 >/tmp/foo && command2 || command3
Run Code Online (Sandbox Code Playgroud)
对比
if command1 >/tmp/foo
then
command2
else
command3
fi
Run Code Online (Sandbox Code Playgroud)
在 crontab 中调用脚本的另一个原因是,您可以调用除 bash 之外的其他内容。例如,您可以调用 perl 脚本甚至 php 脚本。
另外,假设您有一些想要在 cron 之外调用的逻辑。然后,将该逻辑放在安装在服务器上的单独脚本中也是有意义的。您可以根据需要在命令行上运行该脚本,也可以从 crontab 中调用它。
最后,请注意在 crontabs 中引用真的很奇怪。典型的例子是 crontabs 吃百分号。如果你在 crontab 行中放了一个 '%',你实际上必须将它加倍('%%'),否则 cron 会吃掉裸百分号并混淆你的 jebebus。
基本上,将 cronjob 包装在脚本中更安全(更标准的引用/转义)且更灵活。任何长于一两个命令的 cronjob 都应该移到单独的脚本中。
第二个问题非常简单:在编辑 crontab 时,不要直接编辑 /var/spool 下的文件。相反,该crontab -e
命令会将您的 crontab 文件复制到 /tmp 中的临时文件。临时文件名的一部分是一个随机字符串,旨在减少crontab -e
尝试编辑 /tmp 中相同文件的两次调用的机会。
由于各种原因,编辑临时文件更安全。一是如果编辑过程崩溃,原始文件将保持不变且可用。另一个是它允许系统在替换旧的 crontab 之前检查新的 crontab 是否存在语法错误。
此外,如果我设法输入整个条目而不说一次“cornjob”,我也会感到惊讶。
归档时间: |
|
查看次数: |
1211 次 |
最近记录: |