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.

Estou nos sistemas SLES 11 SP2 e SP3

Dinesh
fonte
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.

Gilles 'SO- parar de ser mau'
fonte
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:

crontab -l -u [username] >/tmp/[username].cron.tmp
crontab -r -u [username]

e para reativar:

crontab -u [username] /tmp/[username].cron.tmp

Isso tem a vantagem adicional de poder executá-lo como usuário sem a necessidade de root (basta remover o parâmetro -u).

braindigitalis
fonte
0

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

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.

Wadih M.
fonte
0

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.

Felix Domestica
fonte
3
Como isso desativa o cron para todos os usuários, ele realmente não responde à pergunta.
Scott
-1

Eu concordo, o caminho via systemctl é o único a seguir. Na framboesa, os comandos do dedo do pé seriam

sudo systemctl stop cron.service
sudo systemctl start cron.service
Juergen
fonte
1
Isso interromperá todo o cronserviço. O OP queria poder escolher quais crontabs de usuários desabilitar.
roaima
1
Também é idêntico a outra resposta.
roaima