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