Eu tinha configurado alguns trabalhos usando crontab
alguns meses atrás e eles estavam funcionando bem até alguns dias atrás, eu notei que um não tinha rodado. Eu apenas tentei verificar o arquivo crontab usando o usuário que criou as tarefas, usando crontab -e
, e nenhum arquivo é aberto. O terminal rapidamente passa rapidamente pela tela e depois volta para a tela onde eu havia entrado no comando. Ele vai e volta rápido demais para eu ver o que está lá.
Eu tenho (como sudo) verificado em /var/spool/cron/crontab/
e vejo que existe um arquivo para o usuário mencionado, que contém o básico:
> DO NOT EDIT THIS FILE - edit the master and reinstall.
> (- installed on Wed Mar 21 00:12:22 2018)
> (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
Noto que a data de hoje é praticamente exatamente onde meus trabalhos do cron pararam! Talvez o sistema precise de um reinício por algum motivo ...
Eu reiniciei a máquina e tentei novamente: crontab -e
, desta vez eu recebi o seguinte erro vindo de Emacs
(o editor padrão, eu acredito):
emacsclient: can't find socket; have you started the server?
To start the server in Emacs, type "M-x server-start".
Warning: due to a long standing Gtk+ bug
http://bugzilla.gnome.org/show_bug.cgi?id=85715
.... [truncated]
Então eu mudei o editor padrão para nano
:
user@user:~$ select-editor
Select an editor. To change later, run 'select-editor'.
1. /bin/ed
2. /bin/nano <---- easiest
3. /usr/bin/code
4. /usr/bin/emacs24
5. /usr/bin/vim.tiny
Choose 1-5 [2]: 2
... e tentei novamente:
user@user:~$ crontab -e
Isso apenas deu o mesmo problema descrito inicialmente - pareceu abrir um arquivo em breve e fechá-lo novamente.
Existe outra maneira de depurar e (espero) recuperar o arquivo original do crontab? Os trabalhos eram complexos para serem configurados (veja a nota 2 abaixo): - /
Eu tentei encontrar tarefas crontab em execução usando esta resposta , então o cron está rodando, mas e as tarefas do meu crontab?
user@user:~$ ps -o pid,sess,cmd afx | egrep "( |/)cron( -f)?$"
1077 1077 /usr/sbin/cron -f
Outras notas:
- o anacron está instalado
- as próprias tarefas cron são definidas no arquivo crontab, não por meio de scripts externos
- um cronjob usou um env virtual, que ainda existe e funciona e eu posso executar o trabalho manualmente
Atualizações:
A saída de algumas verificações adicionais (solicitadas principalmente pelo @steeldriver)
user@user:~$ ls -l $(which crontab)
-rwxr-sr-x 1 root crontab 36080 Apr 5 2016 /usr/bin/crontab
O setuid
s está lá? Eu comparei a ping
, porque eu li que deveria ter algum tipo de permissões elevadas:
user@user:~$ ls -l $(which ping)
-rwsr-xr-x 1 root root 44168 Mai 7 2014 /bin/ping
Executando crontab
como sudo:
user@user:~$ sudo crontab -e
[sudo] password for user:
no crontab for root - using an empty one
No modification made
Experimentando o comando desejado como sudo, usando a configuração do usuário:
user@user:~$ sudo -H -u user bash -c 'crontab -e'
No modification made
Verificando se as permissões para o spool inteiro são as esperadas:
user@user:~$ ls -ld /tmp
drwxrwxrwt 16 root root 36864 Apr 1 14:22 /tmp
user@user:~$ sudo namei -l /var/spool/cron/crontabs/$USER
f: /var/spool/cron/crontabs/user
drwxr-xr-x root root /
drwxr-xr-x root root var
drwxr-xr-x root root spool
drwxr-xr-x root root cron
drwx-wx--T root crontab crontabs
-rw------- user crontab user