Bash script to update the cronjobs of the current project (and only those)

v1.0.0 2019-02-18 08:04 UTC

This package is auto-updated.

Last update: 2023-09-18 19:14:29 UTC


Bash script to update the cronjobs of the current project and only those.
update-cronjobs.sh takes cronjobs via the standard input in normal crontab format and puts them in a special block without touching the already existing cronjobs in the cron file.

This allows you to build a script to automatically update your project cronjobs on deployment.
If you are not the one deploying your application, you can just pass the system admin the name of the script to execute to setup your cronjobs instead of having to tell him every single line that you want in your cronjobs file.

If you put the script to update your cronjobs into your projects git / svn repository, you also suddenly have your cronjobs, including the time they should be executed, in version control, without installing big cron-like-behaviour bundles for your framework / cms.

Setup with composer:

composer require ujamii/update-cronjobs

Add a scripts/setupCronjobs.sh to your project:

#!/usr/bin/env bash

PROJECT_ROOT=$(cd $(dirname $0)/..; pwd -P)
CRONJOBS_NAME='My great project'

${PROJECT_ROOT}/vendor/ujamii/update-cronjobs/update-cronjobs.sh "${CRONJOBS_NAME}" $1 <<-EOF
	@daily      ${PROJECT_ROOT}/bin/console daily-cronjob-example

	# Send mails every 5 minutes
	*/5 * * * * ${PROJECT_ROOT}/bin/console sendmails

	# ... Your other cronjobs ...

Now you can run ./scripts/setupCronjobs.sh to update your project cronjobs without touching the other cronjobs already in the crontab.

This will result in the following crontab:

#---- My great project cronjobs start here ----#
@daily      bin/console daily-cronjob-example

# Send mails every 5 minutes
*/5 * * * * bin/console sendmails

# ... Your other cronjobs ...
#---- My great project cronjobs end here ------#

To remove the whole block again, including the start and end markers, call ./scripts/setupCronjobs.sh -r
This again won't affect the other cronjobs in the crontab and just remove the project block.