具有相同执行时间的cron作业


8

假设我设置了几个要同时运行的cron作业:它们是并行执行还是一个接一个地执行?

(我的案例是在/etc/cron.d/mycronjobs里面放了cronjobs的Debian)。

Answers:


7

为了完整起见,依次运行/ etc / cron。{每小时,每天,每周,每月}中的作业。运行部件脚本循环遍历此目录中的所有文件。

02 4 * * * root run-parts /etc/cron.daily

因此,可以将其与命名约定(/etc/init.d/rc*.d例如类似于编号)结合使用,以确保作业按顺序运行。


如果我在同一文件中有多个cron作业,并且设置为同时运行该怎么办?
加布里埃莱2012年

我不确定“在同一文件中”是什么意思。但是,如果您的意思是您有多条具有相同时间规格的行(如0 * * * *您先前发布的行),则正如其他行已发布的那样,不能保证它们的运行顺序。它们可能在多核系统上并行运行, AFAIK的运行顺序甚至每天都可能不同。我提到的命名约定与运行部件结合使用或使用调用实际备份脚本的主脚本是确保脚本以特定顺序执行的唯一方法。
布拉姆

好的,然后,由于我需要确保我的脚本将一个接一个地运行,因此我认为我将选择由cron作业触发的“主脚本”,并从主脚本中调用任何脚本。
加布里埃莱2012年

5

cron中列出的任务将与进程通常并行运行。无法确保先启动哪个任务,也无法通过cron来确保任务B开始之前任务A已完成。


1
您可以通过在同一行上列出它们并将其用分号隔开来确保任务A在任务B开始之前已经完成。
尼古拉斯

这并不意味着任务A已成功完成。也许您可以使用&&,但是类似的任何事情都应该由调用的脚本来执行。
西尔奇(Sirch)

您可以使用bash shell支持的任何操作数。使用&&,||或; 根据我的经验,在cron中是常见的做法。
尼古拉斯

2

Cron是一个连续运行的守护程序(服务);但是,它每分钟读取一次crontabs。

执行作业的确切顺序将取决于系统crond的实现。

由于某些文件遵循正常的crontab(5)语法,因此会扫描某些发行版放入/etc/cron.d/内的松散文件的cron计时器设置。

显然,各个作业的执行顺序取决于您为其设置的时间表。


如果计划的设置是这样的:---- 0 * * * * root sh / var / opt / backup_scripts / backup1-0 * * * * root sh / var / opt / backup_scripts / backup2 ----他们会按顺序运行,即backup1,完成后再运行backup2?
加布里埃莱2012年

执行作业的确切顺序将取决于系统crond的实现。曼cron的详细信息。
适配器2012年

man cron对此一无所知(至少在Debian中如此)。
加布里埃莱2012年

2

它们将并行运行。您可以使用以下方法按顺序运行进程。

# Use a semicolon to run command2 after command1 has completed
02 4 * * * /path/to/command1 ; /path/to/command2

# Use two ampersands to run command2 after command1 has completed successfully.
02 4 * * * /path/to/command1 && /path/to/command2

# Use two vertical rules to run command2 after command1 has completed unsuccessfully.
02 4 * * * /path/to/command1 || /path/to/command2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.