É possível escrever no crontab a partir de um script multiuso?

2

Quando eu quero manipular o cron do Unix, eu faço

crontab -e

digite (ou cole) minhas diretivas.

Como eu colo diretiva para crontab diretamente de um script ?

Em outras palavras: Em vez de colar o conteúdo dentro de crontab -e, eu quero colar e salvar lá de fora, pronto de um script, para automatizar as coisas.

Eu pergunto isso em relação a um script multi-propósito que eu corro cada vez que eu criar um novo ambiente VPS (por exemplo, nova gota Digital Ocean).

Eu posso digitar em arquivos por exemplo:

sudo bash -c "touch /location/new_file && echo 'text...text...text...text' > /location/new_file

Ou:

sudo cat <<EOF >> /location/new_file
text...
text...
text...
text...
EOF

No entanto, não sei se é possível escrever diretamente no Crontab a partir de um script e como.

Esta é a tarefa que eu gostaria de colar dentro da guia Cron --- De um script:

0 8 * * *  tar -zcvf /home/USER/backups/files/www-html-$(date +\%F-\%T-).tar.gz /var/www/html
0 8 * * *  find /home/USER/backups/files/* -mtime +30 -exec rm {} \;

0 8 * * *  mysqldump -u benia -p121212 --all-databases > /home/USER/backups/mysql/alldb_backup.sql
1 8 * * *  tar -zcvf /home/USER/backups/mysql/alldb_backup-$(date +\%F-\%T-).sql.tar.gz /home/USER/backups/mysql/alldb_backup.sql
2 8 * * *  rm /home/USER/backups/mysql/alldb_backup.sql
2 8 * * *  find /home/USER/backups/mysql/* -mtime +30 -exec rm {} \;

Nota:

A tarefa cron acima faz duas coisas:

  1. Faça o backup diário de todos os site-dirs e todos os sqls, em dois diretórios diferentes: um é ~ / backups / files e um é ~ / backups / sql
  2. Encontre e exclua arquivos criados há 30 dias --- todos os dias.
por JohnDoea 13.11.2016 / 03:08

2 respostas

2

Por resposta do Ipor Sircer sobre o uso de cron , ou seja,

man crontab:

   crontab [ -u user ] file

   The  first  form  of this command is used to install a new crontab from
   some named file or standard  input  if  the  pseudo-filename  ''-''  is
   given.

isto significa que você envia as linhas que você quer em seu arquivo crontab, para o stdin deste comando:

crontab -

crontab irá recriar um novo arquivo cron contendo esses comandos.

  1. O script primeiro imprimirá seu crontab existente usando crontab -u $user -l 2>/dev/null .
    você precisará atribuir o valor de seu usuário a $user ou usar $USER se estiver em seu ambiente.

  2. Ele imprimirá as novas linhas que você deseja e capturará o resultado agregado em um canal conectado ao stdin de crontab - .

Veja como deve ficar em seu script de propósito geral:

#!/bin/bash

user=YOU_NEED_TO_ENTER_YOUR_USER_HERE

# use a subshell to capture both commands output into the pipe (    # prints the current value of crontab
    crontab -u $user -l 2>/dev/null

    # print your cron jobs to STDOUT    
    cat <<- 'EOF'
        0 8 * * *  tar -zcvf /home/USERNAME/backups/files/www-html-$(date +\%F-\%T-).tar.gz /var/www/html
        0 8 * * *  find /home/USERNAME/backups/files/* -mtime +30 -exec rm {} \;

        0 8 * * *  mysqldump -u benia -p121212 --all-databases > /home/USERNAME/backups/mysql/alldb_backup.sql
        1 8 * * *  tar -zcvf /home/USERNAME/backups/mysql/alldb_backup-$(date +\%F-\%T-).sql.tar.gz /home/USERNAME/backups/mysql/alldb_backup.sql
        2 8 * * *  rm /home/USERNAME/backups/mysql/alldb_backup.sql
        2 8 * * *  find /home/USERNAME/backups/mysql/* -mtime +30 -exec rm {} \;
    EOF

# Everything printed to stdout - inside the subshell will be connected
# to the pipe and feed to crontab on stdin - recreating a new crontab ) | crontab -
    
por 13.11.2016 / 06:40
1

man crontab:

   crontab [ -u user ] file

   The  first  form  of this command is used to install a new crontab from
   some named file or standard  input  if  the  pseudo-filename  ''-''  is
   given.
    
por 13.11.2016 / 06:18