Existe um comando ou um script existente que permita visualizar todos os trabalhos agendados do sistema * NIX de uma só vez? Gostaria que ele incluísse todos os crontabs do usuário, bem como o que /etc/crontab
quer que esteja /etc/cron.d
. Também seria bom ver os comandos específicos executados run-parts
em /etc/crontab
.
Idealmente, eu gostaria da saída em uma boa forma de coluna e ordenada de alguma maneira significativa.
Eu poderia então mesclar essas listagens de vários servidores para visualizar a "agenda de eventos" geral.
Eu estava prestes a escrever um roteiro assim, mas se alguém já se deu ao trabalho ...
Respostas:
Você precisaria executar isso como root, mas:
fará um loop sobre cada nome de usuário listando seu crontab. Os crontabs são de propriedade dos respectivos usuários, portanto você não poderá ver o crontab de outro usuário sem eles ou com raiz.
Edite se quiser saber a qual usuário um crontab pertence, use
echo $user
fonte
for user in $(getent passwd | cut -f1 -d: ); do echo $user; crontab -u $user -l; done
for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l 2>/dev/null | grep -v '^#'; done
for user in $(getent passwd | awk -F : '{print $1}'); do echo $user; crontab -u $user -l; done
/etc/cron.hourly/
,/etc/cron.daily/
,/etc/cron.weekly/
,/etc/cron.monthly/
...?Acabei escrevendo um script (estou tentando me ensinar os pontos mais sutis do script bash, é por isso que você não vê algo como Perl aqui). Não é exatamente um caso simples, mas faz a maior parte do que eu preciso. Ele usa a sugestão de Kyle para procurar crontabs de usuários individuais, mas também lida com
/etc/crontab
(incluindo os scripts lançados porrun-parts
em/etc/cron.hourly
,/etc/cron.daily
etc.) e os postos de trabalho no/etc/cron.d
diretório. Ele pega todos eles e os mescla em uma exibição, algo como o seguinte:Observe que ele mostra o usuário e classifica mais ou menos por hora e minuto, para que eu possa ver a programação diária.
Até agora, eu testei no Ubuntu, Debian e Red Hat AS.
fonte
<' showcrons.sh: line 59:
feito <<(cut --fields = 1 --delimiter =: / etc / passwd) '/etc/anacrontab
No Ubuntu ou debian, você pode visualizar o crontab
/var/spool/cron/crontabs/
e, em seguida, um arquivo para cada usuário. Isso é apenas para crontabs específicos do usuário, é claro.Para Redhat 6/7 e Centos, o crontab está abaixo
/var/spool/cron/
.fonte
/etc/passwd
. Na IMO, essa deve ser a resposta aceita, e não todas as soluções de força bruta.Isso mostrará todas as entradas do crontab de todos os usuários.
fonte
Depende da sua versão Linux, mas eu uso:
como raiz. Muito simples e muito curto.
Dá-me saída como:
fonte
tail -n +1 /var/spool/cron/*
para listar todo o conteúdo dos arquivos.sudo sh -c 'tail -n +1 /var/spool/cron/*'
se você não quiser se tornar root. Meu TOC me obrigou a investigar por que não consegui executar esse comando como está escrito. Isso porque os usuários comuns não têm acesso a / var / spool / cron dir e a glob estava sendo interpretada como um caractere estrela literal, o que obviamente não existe.cd /var/spool/cron/cron/ && grep . *
também irá imprimir o nome de usuário correspondente na frente de cada trabalho cronUm pequeno refinamento da resposta de Kyle Burton com melhor formatação de saída:
fonte
Isso evita mexer diretamente com o passwd, ignora os usuários que não possuem entradas cron e, para os que os possuem, imprime o nome de usuário e seu crontab.
Principalmente largando isso aqui, para que eu possa encontrá-lo mais tarde, caso eu precise procurá-lo novamente.
fonte
/etc/passwd
. A solução de Matt acima é mais apropriada para essa situação específica, mas é bom saber que o comando existe.Se você verificar um cluster usando o NIS, a única maneira de verificar se um usuário tem uma entrada no crontab é de acordo com as respostas / var / spool / cron / tab de Matt.
fonte
Para obter a lista do usuário ROOT.
fonte
Este script funcionou para mim no CentOS para listar todos os crons no ambiente:
fonte
cat /etc/passwd | sed 's/^\([^:]*\):.*$/echo "\ncrontab for \1:"; sudo crontab -u \1 -l 2>\&1/' | grep -v "no crontab for" | sh
salva um pouco de tempoGosto da resposta simples de uma linha acima:
Mas o Solaris que não possui o sinalizador -u e não imprime o usuário que está verificando, é possível modificá-lo da seguinte forma:
Você obterá uma lista de usuários sem os erros gerados pelo crontab quando uma conta não tiver permissão para usar o cron etc. Esteja ciente de que no Solaris, as funções também podem estar no / etc / passwd (consulte / etc / user_attr).
fonte
fonte
A seguir, os comentários, as linhas vazias e os erros são removidos dos usuários sem crontab. Tudo o que resta é uma lista clara de usuários e seus trabalhos.
Observe o uso de
sudo
na 2ª linha. Se você já é root, remova-o.Exemplo de saída:
Eu uso isso no Ubuntu (12 a 16) e Red Hat (5 a 7).
fonte
Depende da sua versão do cron. Usando o Vixie cron no FreeBSD, posso fazer algo assim:
se eu quiser que ele seja mais delimitado por tabulação, posso fazer algo assim:
Onde essa é uma guia literal na parte de substituição sed.
Pode ser mais independente do sistema fazer um loop entre os usuários
/etc/passwd
e fazercrontab -l -u $user
por cada um deles.fonte
Obrigado por este script muito útil. Eu tive alguns pequenos problemas ao executá-lo em sistemas antigos (Red Hat Enterprise 3, que manipulam egrep e tabs de maneira diferente em strings) e outros sistemas sem nada no /etc/cron.d/ (o script terminou com um erro). Então, aqui está um patch para fazê-lo funcionar nesses casos:
Não tenho muita certeza de que as mudanças no primeiro egrep sejam uma boa idéia, mas esse script foi testado no RHEL3,4,5 e Debian5 sem nenhum problema. Espero que isto ajude!
fonte
Construindo em cima de @Kyle
para evitar os comentários geralmente na parte superior de / etc / passwd,
E no macosx
fonte
grep -v '^#
'em vez de confiar no número mágico11
?Eu acho que um liner melhor estaria abaixo. Por exemplo, se você tiver usuários no NIS ou LDAP, eles não estariam no / etc / passwd. Isso fornecerá as crontabs de todos os usuários que efetuaram login.
fonte
você pode escrever para toda a lista de usuários:
Você também pode ir para
esse arquivo listará os agendamentos
fonte
Com desculpas e obrigado a yukondude.
Tentei resumir as configurações de tempo para facilitar a leitura, apesar de não ser um trabalho perfeito, e não toco em 'toda sexta-feira' ou 'apenas nas segundas-feiras'.
Esta é a versão 10 - agora:
Agora estou publicando o script completo aqui.
https://gist.github.com/myshkin-uk/d667116d3e2d689f23f18f6cd3c71107
fonte
Como é uma questão de percorrer um arquivo (
/etc/passwd
) e executar uma ação, estou perdendo a abordagem adequada em Como posso ler um arquivo (fluxo de dados, variável) linha por linha (e / ou campo por campo) )? :Isso lê
/etc/passwd
linha por linha usando:
como delimitador de campo. Ao dizerread -r user _
, fazemos$user
segurar o primeiro campo e_
o restante (é apenas uma variável de lixo eletrônico a ignorar).Dessa forma, podemos chamar
crontab -u
usando a variável$user
, que citamos por segurança (e se ela contiver espaços? É improvável nesse arquivo, mas você nunca pode saber).fonte
No Solaris, para um nome de usuário conhecido específico:
Todos os outros * Nix precisarão de
-u
modificador:Para obter todos os trabalhos do usuário de uma vez no Solaris, assim como outras postagens acima:
fonte
Para mim, veja / var / spool / cron / crontabs é a melhor maneira
fonte
Esse script gera o Crontab em um arquivo e também lista todos os usuários que confirmam aqueles que não têm entrada no crontab:
fonte