Os trabalhos cron.daily não estão em execução

19

Criei 3 tarefas diárias de cron para executar.

Abaixo estão os três colocados em etc / cron.daily

rkhunter.sh

#!/bin/sh
(
rkhunter --versioncheck
rkhunter --update
rkhunter --cronjob --report-warnings-only
) | mail -s 'rkhunter Daily Run (my server)' [email protected]

chkrootkit.sh

#!/bin/bash
chkrootkit | mail -s "chkrootkit Daily Run (my server)" [email protected]

logwatch.sh

#!/bin/sh
(
logwatch
) | mail -s 'logwatch Daily Log (my server)' [email protected]

Substituí [email protected] ofcourse pelo meu e-mail.

Se eu executar este cronjob manualmente, ele funciona bem ./nameoffile.sh

Mas não é executado diariamente, qual pode ser a causa ou como posso verificar isso?

sonicboom
fonte
2
Certifique-se de que os arquivos que você criou na cron.daily / semanal / hora / etc são executáveis apenas fazer um chmod + x /etc/cron.daily/whatever
Turgut Kalfaoglu

Respostas:

6

Existem dois suspeitos possíveis que geralmente fazem com que os crontrabalhos não possam ser executados.

O primeiro são problemas de permissão, ou seja, um usuário pode executar o script / comando, mas o daemon cron não pode, porque o trabalho está nos trabalhos cron do usuário errado. Por exemplo, o usuário cria um script ou executa um comando com privilégios elevados, ou seja sudo, usando , em seguida, adiciona o script / comando testado à sua lista de tarefas cron ( crontab). O resultado é que o trabalho cron do usuário não poderá ser executado, pois precisa de privilégios elevados.

  • Para colocar um trabalho cron no tipo de crontab do usuário atual crontab -e
  • Para colocar uma tarefa cron no tipo crontab do root sudo crontab -e

A segunda razão são os caminhos; para ter certeza de que o script será executado, o usuário deve adicionar o caminho completo ao script a ser executado no crontab. Outra solução seria expandir a variável PATH dos usuários raiz, colocando a seguinte linha na parte superior do arquivo crontab:

PATH=/usr/sbin:/usr/bin:/sbin:/bin

como o wiki da comunidade menciona .

Você pode ler o wiki da comunidade sobre o cron, pois ele fornece mais detalhes sobre o acima.

Stef K
fonte
Então, basta colocar o nome do arquivo lá?
Sonicboom
Na verdade, está dizendo que não existe um trabalho cron anterior para o root e você escreverá o seu primeiro e, em seguida, solicitará que você escolha um editor para modificar o crontab. Basta escolher um no menu (1.bin / ed, etc). Escolha o nano, é fácil, basta prestar atenção às instruções.
Stef K
Então, para rodar uma vez por dia às 22h, eu colocaria * 22 * ​​* * test> rkhunter.sh, certo?
Sonicboom
ah demais! vou tentar agora mesmo!
Sonicboom
Para que serve o teste> rkhunter.sh?
Sonicboom
75

De acordo com esta resposta, o problema está na extensão .sh. Remova isso (por exemplo, renomeie seu arquivo de rkhunter.sh para rkhunter.

Para confirmar, execute o seguinte comando run-parts --test /etc/cron.daily

Se o seu script (rkhunter) estiver incluído nos resultados, tudo estará bem. Para obter mais informações sobre o comando run-parts, leia as páginas de manual.man run-parts

user19366
fonte
1
Esta é a resposta que eu estava procurando, depois de vários testes, percebi que outro arquivo de script sem extensão sh é executado.
Albert Català
5
como @rharriso disse em sua resposta. não é tanto um problema com ".sh" como um problema com ".". qualquer arquivo com qualquer extensão será perdido. para citar diretamente de man run-parts"nomes devem consistir inteiramente em ASCII letras maiúsculas e minúsculas, números ASCII, sublinhados ASCII e ASCII Minus-hífens"
norte-Bradley
10

Eu acho que arquivos com extensões são ignorados.

corre:

 run-parts --test /etc/cron.daily

Se você não vê seus scripts listados, remova as extensões .sh e tente novamente.

rharriso
fonte
10

No meu sistema, era porque o anacron não estava instalado.

grep run-parts /etc/crontab

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

Portanto, instale o anacron ou remova o teste -x / usr / sbin / anacron

Natim
fonte
1
+1 O anacron não está instalado por padrão? Eu teria esperado isso. Eu acho que isso resolveria isso para mim. Obrigado.
Lepe
O suficiente certeza, não estava lá no meu .. FFS, estou certo de que era, como o roteiro estava sendo executado há alguns meses !: dpkg --get-selections | grep cron.. <jura>
Grizly
Sim, também não sei o que aconteceu, pois é um pacote geralmente instalado na inicialização.
Natim 20/05
9
Isso não está realmente correto. anacronnão é necessário; o ||operador nos comandos crontab executa run-partsquando o anacron NÃO está instalado. Quando anacroninstalado, torna run-partsredundantes os comandos diários / semanais / mensais .
TalkLittle
Talvez porque as peças de execução não funcionaram? Em qualquer caso, a instalação do anacron o corrigiu para mim.
Natim 29/11
5

Adicionando à resposta de Stef, você também deve garantir que eles tenham o bit executável:

$ ls -l
-rwxr-xr-x  1 root root   268 Jun  1 08:06 00logwatch
-rwxr-xr-x  1 root root   311 May 22  2012 0anacron
-rwxr-xr-x  1 root root 15007 Jun  6 14:08 apt

Você deve poder executá-los usando chmod +x filename.

Braiam
fonte
4

Renomeie seu arquivo para não ter a extensão .sh

Para verificar se esse é o problema, tente

sudo run-parts --list /etc/cron.daily 

você verá que não está listado. Então corra:

mv script.sh script

e tente listar novamente. Deve ser listado.

Elan Kivity
fonte
Esse problema parece afetar qualquer executável que tenha uma extensão. Eu tinha nomes dos arquivos "filename.ca" e também não listá-lo até que eu renomeado-lo também "filename"
kiwicomb123
0

Eu não poderia obtê-lo correr com anacron, tirei anacron de /etc/crontabe executado apt remove --purge anacrone funciona imediatamente.

Não entendo por que precisamos de dois agendadores.

Patrik Laszlo
fonte