Por que meu crontab do Ubuntu é temporário?

1

Algumas horas atrás eu acabei de criar um novo ambiente VPS e, logo no início, fiz o crontab -e, colei meus cronjobs de um arquivo e salvei.

Eu fiz crontab -e há alguns minutos e vi que o nome do arquivo é:

/tmp/crontab.MSK8I2/crontab

Por que isso? Thx,

    
por JohnDoea 01.01.2017 / 06:36

1 resposta

2

A execução de crontab -e edita os crontabs dos usuários (em vez do sistema crontab /etc/crontab ). Se você executar sudo crontab -e , isso edita o crontab do usuário da conta root (que não é igual a /etc/crontab ). O crontab do usuário da conta root é utilizável, mas geralmente não é o que os administradores de sistema desejam editar.

Quando você executa crontab -e , o utilitário crontab copia o arquivo crontab específico do usuário que está sendo editado em um arquivo temporário. Este é o comportamento pretendido e correto. Supondo que você faça alterações no arquivo temporário no editor, crontab , em seguida, grava essas alterações automaticamente no arquivo crontab depois de terminar a edição.

Braiam tem explicou alguns detalhes sobre por que e como isso é feito em" Cron, crontab -e lê o arquivo errado " em Unix.SE :

  

Esse é o comportamento padrão. crontab -e iria copiar o crontab   arquivo para o diretório temporário e use o editor listado em   Variáveis de ambiente VISUAL ou EDITOR para abrir este arquivo, ao salvar   Em seguida, ele tentaria copiar o arquivo para o local original. Isto é   uma operação atômica.

     

As razões por trás disso são variadas, desde impedir que dois usuários editem   o mesmo arquivo ao mesmo tempo para ter uma verificação de sanidade / sintaxe antes   escrevendo o arquivo original.

     

Ah, o crontab -e também não recorta o arquivo de forma alguma, a menos que você   use o Debian.

A captura de tela em sua pergunta mostra algo muito parecido com isso, que é o texto padrão comentado de um crontab usuário no Ubuntu:

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command

Em contraste, um sistema padrão crontab ( /etc/crontab ) no Ubuntu se parece com isto:

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the 'crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

Como o siloko explica em " Crontab -e abre novo arquivo toda vez que eu o executo ," e como discutido nos comentários iniciais do sistema padrão crontab (mostrado acima ), uma maneira pela qual o crontab /etc/crontab em todo o sistema difere dos crontabs por usuário é que cada entrada contém um campo que especifica qual usuário executa o comando. O exemplo acima tem root para cada um dos três comandos, mas você pode fazer com que os comandos sejam executados como outros usuários, especificando seus nomes de usuário nesse campo.

Embora eu não possa ter certeza, meu palpite é que você está tentando editar o crontab do sistema em vez do crontab do usuário do root (ou de qualquer outra pessoa).

Leitura adicional:

por Eliah Kagan 01.01.2017 / 08:05