-- Leo's gemini proxy

-- Connecting to perso.pw:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini;

Deploying cron programmaticaly the unix way


Author: Solène

Date: 31 May 2018

Tags: unix


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


If I add to *crontab_solene* the line

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



if [ -z "$1" ]; then

echo "Usage: $0 user_crontab_file"

exit 1

fi


VALIDATION=0

grep "^## TAG ##$" "$1" >/dev/null

VALIDATION=$?

grep "^## END_TAG ##$" "$1" >/dev/null

VALIDATION=$(( VALIDATION + $? ))


if [ "$VALIDATION" -ne 0 ]

then

echo "file ./${1} needs \"## TAG ##\" and \"## END_TAG ##\" to be used"

exit 2

fi


crontab -l | \

awk '{ if($0=="## TAG ##") { hide=1 }; if(hide==0) { print } ; if($0=="## END_TAG ##") { hide=0 }; }' | \

cat - "${1}" | \

crontab -

-- Response ended

-- Page fetched on Tue Apr 16 18:46:39 2024