Title: Deploying cron programmaticaly the unix way
       Author: Solène
       Date: 31 May 2018
       Tags: unix
       Description: 
       
       Here is a little script to automatize in some way your crontab
       deployment when you don't want to use a configuration tool like
       ansible/salt/puppet etc... This let you package a file in your project
       containing the crontab content you need, and it will add/update your
       crontab with that file.
       
       The script works this way:
       
           $ ./install_cron crontab_solene
       
       with *crontab_solene* file being an actual crontab correct, which
       could looks like this:
       
           ## TAG ##
           MAILTO=""
           */5 * * * *  ( cd ~/dev/reed-alert && ecl --load check.lisp )
           */10 * * * * /usr/local/bin/r2e run
           1 * * * * vacuumdb -azf -U postgres
           ## END_TAG ##
       
       Then it will include the file into my current user crontab, the
       **TAG** in the file is here to be able to remove it and replace it
       later with the new version. The script could be easily modified to
       support the tag name as parameter, if you have multiple deployments
       using the same user on the same machine.
       
       
       Example:
       
           $ crontab -l
           0 * * * * pgrep iridium | xargs renice -n +20
           $ ./install_cron crontab_solene
           $ crontabl -l 
           0 * * * * pgrep iridium | xargs renice -n +20
           ## TAG ##
           MAILTO=""
           */5 * * * *  ( cd ~/dev/reed-alert && ecl --load check.lisp )
           */10 * * * * /usr/local/bin/r2e run
           1 * * * * vacuumdb -azf -U postgres
           ## END_TAG ##
       
       `0 20 * * * ~/bin/faubackup.sh` I can now reinstall
       the crontab file.
       
           $ crontabl -l 
           0 * * * * pgrep iridium | xargs renice -n +20
           ## TAG ##
           MAILTO=""
           */5 * * * *  ( cd ~/dev/reed-alert && ecl --load check.lisp )
           */10 * * * * /usr/local/bin/r2e run
           1 * * * * vacuumdb -azf -U postgres
           ## END_TAG ##
           $ ./install_cron crontab_solene
           $ crontabl -l 
           0 * * * * pgrep iridium | xargs renice -n +20
           ## TAG ##
           MAILTO=""
           */5 * * * *  ( cd ~/dev/reed-alert && ecl --load check.lisp )
           */10 * * * * /usr/local/bin/r2e run
           1 * * * * vacuumdb -azf -U postgres
           0 20 * * * ~/bin/faubackup.sh
           ## END_TAG ##
       
       
       Here is the script:
       
           #!/bin/sh
       
               echo "Usage: $0 user_crontab_file"
               exit 1
           fi
       
           grep "^## TAG ##$" "$1" >/dev/null
           VALIDATION=$?
           grep "^## END_TAG ##$" "$1" >/dev/null
           VALIDATION=$(( VALIDATION + $? ))
       
           then
               echo "file ./${1} needs \"## TAG ##\" and \"## END_TAG ##\" to
       be used"
                   exit 2
           fi
       
               awk '{ if($0=="## TAG ##") { hide=1 };  if(hide==0) { print } ;
       if($0=="## END_TAG ##") { hide=0 }; }' | \
               cat - "${1}" | \
               crontab -