| 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 - |