Suppose I have several cron jobs set up to run at the same time: do they execute in parallel or just one after another?
(My case is Debian squeeze with cronjobs put inside /etc/cron.d/mycronjobs).
Server Fault is a question and answer site for system and network administrators. It only takes a minute to sign up.
Sign up to join this communityFor completeness, jobs in e.g. /etc/cron.{hourly,daily,weekly,monthly} are run sequentially. The run-parts script loops over all files in this directory.
02 4 * * * root run-parts /etc/cron.daily
So you can use that in combination with a naming convention (similar to the numbering in /etc/init.d/rc*.d
for example) to make sure jobs run sequentially.
0 * * * *
you posted earlier) then as other have posted there is no guarantee on the order they will run in. They may run in parallel on a multi-core system, AFAIK the order in which they run may even be different each day. The naming convention I mentioned in combination with a run-parts or the use of a master script that calls the actual backup scripts is the only way to ensure scripts are executed in a particular order.
The tasks listed in cron will run in parallel, just as processes usually do. Theres no way of being sure which will start first, and no way in cron to make sure task A has complete before task B starts.
Cron is a daemon (service) that runs continuously; however, it reads crontabs once a minute.
The exact sequence in which jobs are executed will depend on the implementation of your systems' crond.
The loose files that some distributions put inside /etc/cron.d/ are scanned for their cron timer settings, since these files follow the normal crontab(5) syntax.
What order the individual jobs are executed in depends on the schedule you set for them, obviously.
They will run in parallel. You can use the following methods to run the processes sequentially.
# 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