I have a crontab that includes many users updating it. The problem is that because of this, it is not easy to know who did what modification of a cronjob.

I was thinking to create a script to do a diff of the crontab with a previously saved version to at least be able to see what has been changed, but I thought that perhaps there is a standard solution for this. What is the best approach for managing my crontab?

2 Answers 2



I would put the contents of the crontab under subversion control and only grant access to this user through sudo. Specifically I would only allow people access to the a command via sudo that would take the head from subversion, and install it as the latest crontab for this particular user. This will provide you with the following:

  • An audit trail of who did what
  • The ability to roll back to a previous crontab file if a problem arises
  • Insulate the operators from having too much permission for this special account

It might seem overly complicated but there is nothing too complicated with what I described if you break it up into small chunks.


Another approach would be to use a tool/script such as MultiCron. This tool would allow you to manage the crontab data external to the crontab entry so that you could better control who/when has access to these changes.

Example Using Subversion

Assuming you'd setup a SVN repository you could create a sudo entry which would allow users to do something like this:

$ sudo deploy_app_cron.bash

The innards of this script could do among other things this:

svn cat file:///home/saml/svnrepo/app_cron_data.txt | crontab -u saml -

The contents of the file app_cron_data.txt:

$ svn cat file:///home/saml/svnrepo/app_cron_data.txt
*/5 * * * * /path/to/job -with args"

Example Usage Loop

So userA wants to update the crontab entry. They would do the following to start:

$ cd $HOME/somedir
$ svn co file:///home/saml/svnrepo/ mywksp
A    mywksp/app_cron_data.txt
$ cd mywksp

Now they do some edits to the crontab file, app_cron_data.txt, and commit them to the repo when they're done.

$ svn commit -m "some msg.." app_cron_data.txt

To deploy these changes they'd run this sudo command:

$ sudo deploy_app_cron.bash


  • 1
    s/subversion/a version control system/ — for this use case even RCS would do Oct 7, 2013 at 23:59
  • @slm:Use versioning. Ok. But I can not understand what you mean by take the head from subversion, and install it as the latest crontab for this particular user. How sudo is involved in this?
    – Jim
    Oct 8, 2013 at 5:57
  • @Jim - see updates.
    – slm
    Oct 9, 2013 at 13:05
  • @Jim - NP, I figured you just forgot, but I noticed you had a lot of Q's and hadn't so I figured I'd drop you a line. Thanks for all the good Q's BTW, they keep the site interesting 8-). Thanks for taking the time to accept too.
    – slm
    Feb 15, 2014 at 20:21
  • 1
    @slm:Thanks for pointing out.I will amend this asap.I am also very happy with this SE and the high quality of answers I get.
    – Jim
    Feb 15, 2014 at 20:23

Well the right solution is to use cron properly and let each user have their own per-user crontab. Is there some omitted reason as to why you'd be setting up crontabs this way? It may even be more preferable to use per-user crontabs and some other workaround to whatever this "unified crontab" is intended to overcome... ?

  • There is only one user's tab shared and this can not change (this user has specific priviliges)
    – Jim
    Oct 7, 2013 at 21:14
  • Then per user crontabs and SUDO would be an alternative?
    – iain
    Oct 7, 2013 at 21:46
  • Another suggestion, if you're dead set on sharing a crontab - use a version control system (git, cvs, svn) to host the necessary file, and have the server check it out to the necessary location when its checked in. Then you have full versioning and rollback, which is what you're going to be after if you're looking to audit a completely collaborative work. The crontab/sudo option is better if each user has their own lines they are responsible for.
    – iain
    Oct 7, 2013 at 21:48
  • have the server check it out to the necessary location when its checked in How do I do this?Could you elaborate please?
    – Jim
    Oct 8, 2013 at 6:04

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .