como desativar temporariamente os cronjobs de um usuário?
14
Como desabilito temporariamente os trabalhos cron de um ou mais usuários? Em particular, não quero suspender os direitos cron do usuário - apenas não demitir nenhum de seus trabalhos.
Você não pode simplesmente usar a -u useropção do crontabcomando e colocar um #caractere de comentário na frente dos trabalhos para desativar o usuário em questão?
Janis
@ Janis, então eu preciso acompanhar o que o usuário (existem muitos) já comentou, além disso, o usuário pode ir em frente e adicionar outra coisa (não os estou adicionando ao /etc/cron.deny). Demasiado trabalho manual :(
Dinesh
Dinesh, eu (entendi) que você deseja um controle granular sobre o que desabilita.
Janis
Respostas:
10
touch /var/spool/cron/crontabs/$username; chmod 0 /var/spool/cron/crontabs/$usernamedeve fazer o truque. Restaure com chmod 600e touch(você precisa alterar o mtime do arquivo para fazer com que o cron (tente) recarregá-lo).
Pelo menos no Debian e provavelmente com o Vixie cron em geral, chmod 400 /var/spool/cron/crontabs/$usernametambém funciona, porque essa implementação insiste em que as permissões sejam exatamente 600. No entanto, isso só dura até o usuário executar o crontabcomando.
Se você deseja uma maneira robusta, não acho que exista algo melhor do que mudar temporariamente o crontab para fora do caminho ou alterar as permissões e adicioná-las temporariamente /etc/cron.deny.
Obrigado. No meu sistema, é / var / spool / cron / tabs / $ nome de usuário. Mas ainda é executado, mesmo após o chmod.
Dinesh
Depois de alterar as permissões de arquivo, eu também precisei parar / reiniciar o cron. Eu pensei que é provavelmente porque cron pode estar segurando as coisas na memória. Então eu adicionei touch $usernameapós o chmod. Mas isso não ajudou. (btw tem o seu ponto cron.deny)
Dinesh
@ Dinesh Na verdade, você precisa atualizar o mtime do arquivo, caso contrário, o cron acha que ele não mudou e mantém as informações em cache. Notei isso durante o teste de ontem, mas esqueci de mencionar na minha resposta, desculpe por isso.
Gilles 'SO- stop be evil'
Se você deseja desativar para todos os usuários padrão apenas:chgrp root /var/spool/cron/crontabs
shrimpwagon
9
Que tal algo assim para desativar um usuário crontab:
Um nome de arquivo de tarefa cron não deve incluir nenhum ponto final ou mais caracteres (. Ou +), pois isso fará com que o cron ignore o arquivo. Sublinhados (_) devem ser usados em vez de. e + caracteres.
Se você apenas deseja interromper todos os crontrabalhos por um tempo - por exemplo, enquanto faz a manutenção do sistema com a qual eles podem interagir mal - os comandos são normalmente
systemctl stop crond.service
e, para retomar
systemctl start crond.service
Presumo que você precise de autoridade de root ou wheel para executá-las; se necessário, execute-os via sudo ou (último recurso) efetue login como root.
Exagero na pergunta específica colocada, mas oferece "um balcão único" e não requer brincadeira com o sistema de arquivos ou com arquivos temporários.
-u user
opção docrontab
comando e colocar um#
caractere de comentário na frente dos trabalhos para desativar o usuário em questão?Respostas:
touch /var/spool/cron/crontabs/$username; chmod 0 /var/spool/cron/crontabs/$username
deve fazer o truque. Restaure comchmod 600
etouch
(você precisa alterar o mtime do arquivo para fazer com que o cron (tente) recarregá-lo).Pelo menos no Debian e provavelmente com o Vixie cron em geral,
chmod 400 /var/spool/cron/crontabs/$username
também funciona, porque essa implementação insiste em que as permissões sejam exatamente 600. No entanto, isso só dura até o usuário executar ocrontab
comando.Se você deseja uma maneira robusta, não acho que exista algo melhor do que mudar temporariamente o crontab para fora do caminho ou alterar as permissões e adicioná-las temporariamente
/etc/cron.deny
.fonte
chmod
.touch $username
após ochmod
. Mas isso não ajudou. (btw tem o seu pontocron.deny
)chgrp root /var/spool/cron/crontabs
Que tal algo assim para desativar um usuário crontab:
e para reativar:
Isso tem a vantagem adicional de poder executá-lo como usuário sem a necessidade de root (basta remover o parâmetro -u).
fonte
Se você estiver usando o Debian, isso se aplica apenas ao Debian AFAIK :
Você pode fazer isso adicionando um ponto ao nome do cronjob.
O comportamento é mencionado nos documentos oficiais do Debian:
https://www.debian.org/doc/debian-policy/#cron-job-file-names
fonte
Se você apenas deseja interromper todos os
cron
trabalhos por um tempo - por exemplo, enquanto faz a manutenção do sistema com a qual eles podem interagir mal - os comandos são normalmentee, para retomar
Presumo que você precise de autoridade de root ou wheel para executá-las; se necessário, execute-os via sudo ou (último recurso) efetue login como root.
Exagero na pergunta específica colocada, mas oferece "um balcão único" e não requer brincadeira com o sistema de arquivos ou com arquivos temporários.
fonte
Eu concordo, o caminho via systemctl é o único a seguir. Na framboesa, os comandos do dedo do pé seriam
fonte
cron
serviço. O OP queria poder escolher quais crontabs de usuários desabilitar.