Como obter uma lista de todos os trabalhos agendados na minha máquina?

201

Meu sysadmin configurou vários trabalhos cron na minha máquina. Gostaria de saber exatamente o que está programado para que horas. Como posso obter essa lista?

Frank
fonte
3
Esta não é a resposta para a pergunta, mas apenas uma observação sobre as melhores práticas. Um pode configurar estes como tarefas agendadas por usuário para rootou apacheou qualquer coisa, mas um deve usar /etc/crontabou (melhor, na maioria das distros) /etc/cron.de /etc/cron.[timeframe].
mattdm
Publiquei um script que automatiza isso de maneira útil em: - stackoverflow.com/questions/134906/… Não é perfeito, mas provavelmente cobre 90% das necessidades. É um bom exemplo do que não escrever no bash.
David Collier

Respostas:

143

Dependendo de como o seu sistema Linux estiver configurado, você pode procurar:

  • /var/spool/cron/* (usuário crontabs)
  • /etc/crontab (crontab em todo o sistema)

Além disso, muitas distribuições têm:

  • /etc/cron.d/* Essas configurações têm a mesma sintaxe que /etc/crontab

  • /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly,/etc/cron.monthly

Esses são simplesmente diretórios que contêm executáveis ​​executados a cada hora, diariamente, semanalmente ou mensalmente, de acordo com o nome do diretório.

Além disso, você pode ter empregos (cheque /var/spool/at/*), anacron ( /etc/anacrontabe /var/spool/anacron/*) e provavelmente outros que estou esquecendo.

jsbillings
fonte
4
Obrigado, eu os encontrei /etc/cron.daily. Como esse dailyarquivo funciona? A que horas os trabalhos diários serão executados? Na minha máquina, eles parecem rodar ao meio-dia, mas gostaria de dizer ao meu administrador de sistemas como mudar isso para meia-noite.
24711 Frank
5
O cron.daily é chamado de /etc/crontab, por exemplo, no meu sistema Ubuntu, é: o 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )que significa 6h25.
Kowh
O cron.daily também é chamado de / etc / crontab no meu sistema RHEL5, se você quiser mais pontos de dados.
jsbillings
No Fedora mais recente (e provavelmente o RHEL6 - ainda não olhou), o croniedaemon cuida daqueles que usam a configuração no /etc/anacrontab.
mattdm
Às vezes também está /var/cron.
CMCDragonkai
135

Com a maioria dos Crons (por exemplo, Vixie-Cron - padrão Debian / Ubuntu, Cronie - padrão Fedora, Solaris Cron ...), você obtém a lista de tarefas agendadas do cron para o usuário atual via:

$ crontab -l

ou para outro usuário via

# crontab -l -u juser

Para obter os crontabs para todos os usuários, você pode fazer um loop sobre todos os usuários e chamar este comando.

Como alternativa, você pode procurar os arquivos de spool. Geralmente, eles são salvos em /var/spool/cron, por exemplo, para o vcron seguinte diretório

/var/spool/cron/crontabs

contém todas as crontabs configuradas de todos os usuários - exceto o usuário raiz que também pode configurar tarefas através do crontab em todo o sistema, localizado em

/etc/crontab

Com o cronie (padrão no Fedora / CentOS), também existe um .ddiretório de configuração de estilo para os trabalhos do cron do sistema:

/etc/cron.d

(Como sempre, o .ddiretório simplifica a manutenção de entradas de configuração que fazem parte de pacotes diferentes.)

Por conveniência, a maioria das distribuições também fornece diretórios nos quais scripts vinculados / armazenados são executados periodicamente, por exemplo:

/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly

A execução oportuna desses scripts geralmente é gerenciada através de run-partsentradas no sistema crontab ou via anacron .

Com o Systemd (por exemplo, no Fedora, CentOS 7, ...), a execução periódica de tarefas também pode ser configurada através de unidades de timer . Os temporizadores do sistema ativados podem ser exibidos através de:

$ systemctl list-timers

Observe que os usuários ao lado do root também podem ter instâncias systemd do usuário em execução nos quais os temporizadores estão configurados. Por exemplo, no Fedora, por padrão, uma instância systemd do usuário é iniciada para cada usuário conectado no momento. Eles podem ser reconhecidos através de:

$ ps aux | grep 'systemd[ ]--user'

Esses timers de usuário podem ser listados através de:

$ systemctl --user list-timers

Uma alternativa para emitir o list-timerscomando é procurar arquivos da unidade de timer (padrão *.timer:) e links simbólicos para eles nos diretórios usuais do sistema e do sistema systemd config:

$ find /usr/lib/systemd/ /etc/systemd -name '*.timer'
$ find /home '(' -path '/home/*/.local/share/systemd/user/*' \
              -o -path '/home/*/.config/systemd/*' ')' \
      -name '*.timer'  2> /dev/null

(Como nas unidades de serviço normais, uma unidade de timer é ativada através da criação de um link simbólico no diretório de configuração systemd correto.)

Veja também:

maxschlepzig
fonte
Eu não voto negativo. Mas eu apenas tentei crontab -l -u root(porque os cronjobs que eu quero saber sobre executar abaixo root) e diz que não tenho privilégios para usar -u.
24711 Frank
3
Então você deve chamá-lo com privilégios suficientes - ou seja, como rootusuário.
maxschlepzig
2
Ainda não está completo - algumas versões do cron executam trabalhos em /etc/cron.d e /etc/cron.{daily,hourly,monthly,weekly} sem um programa auxiliar chamado em / etc / crontab.
mattdm
2
@maxschlepzig - mas nem sempre. E a pergunta é "como posso obter uma lista de todos os trabalhos cron"; uma resposta que é "bem, aqui estão alguns deles" não é a resposta.
mattdm
1
@maxschlepzig - cronie, como fornecido no Fedora e RHEL6, não se refere a eles /etc/crontab, mas use /etc/anacrontab. Eu posso estar enganado sobre quaisquer implementações reais que não se refiram a elas em nenhum arquivo de configuração. (Mas então, eu não downvote quer .... Eu só estou dizendo.)
mattdm
5

Para listar todos os crons para o usuário especificado.

crontab -u nome de usuário -l;

Para listar todos os crons para todos os usuários

Execute-o como um super usuário

#!/bin/bash
#List all cron jobs for all users
for user in `cat /etc/passwd | cut -d":" -f1`;
do 
crontab -l -u $user;
done
Manikandan Arunachalam
fonte
1
O OP está solicitando uma lista de todos os trabalhos cron.
Drav Sloan
1
Por alguma razão, isso não mostra /etc/cron.d/ jobs.
jamshid
Não está funcionando. "sem crontab para www-data". mas o nome de usuário www-data existe.
mishanon