Ubuntu:cron 如何执行作业?

Mar*_*sen 5 linux cron ubuntu-12.04

我无法通过谷歌找到这个问题的答案:

ubuntu 中的 CRON 执行作业的程度如何?

它是否会在自己的流程中产生每个新工作?

假设我有两个 cron 工作:

@reboot /some/really/slow/job
* * * * * /some/quick/job
Run Code Online (Sandbox Code Playgroud)

这些作业会并行运行,还是第一个作业会阻塞第二个作业直到完成?

其次,Cron 会影响重定向吗?假设我有一个包含类似内容的脚本

rsync --verbose /from /to &>>rsynclog.log
Run Code Online (Sandbox Code Playgroud)

从 CRON 调用时会写入日志文件吗?还是会在其他地方结束?

sus*_*tus 6

这个答案是针对 ubuntu 的。其他 linux / unix 操作系统可能略有不同。

cron守护进程每分钟读取所有crontab文件并将它们加载到内存中。对于cron要运行的每个条目(由 crontab 时间字段确定),cron派生一个其自身的副本。

分叉的 cron 子进程然后执行一个新的 shell(通常是 /bin/sh,但这可以被覆盖)来执行 crontab 命令。cron 本身只派生管理作业的子进程。所以 cron 条目是并发运行的——例如,如果一个作业需要一个小时,它不会影响任何其他 cron 作业的执行。

重定向应该正常工作,输出文件将写入拥有 crontab 的用户的 $HOME 目录。在某些情况下,值得提供命令和重定向文件的完整路径,以避免出现 PATH 和 HOME 设置问题。