por que 0 0 * * 1 hostname /tmp/hostname.txt não funciona como um crontab?

5
0 0 * * 1 root hostname >> /tmp/hostname.txt

A entrada cron acima deve ser executada meia-noite na segunda-feira e criar um arquivo em /tmp chamado hostname.txt com a saída do comando hostname . Mas é apenas um arquivo em branco que é criado. Por quê?

    
por Gregg Leventhal 17.09.2013 / 05:27

2 respostas

7

Ao lidar com entradas de crontab, é importante fazer a distinção entre um cron no nível do sistema, normalmente em um desses locais:

  • / etc / crontab
  • /etc/cron.d / *
  • /etc/cron.daily / *
  • /etc/cron.weekly / *
  • etc.

Ou a variedade de nível de usuário, que na verdade está armazenada nesse diretório, /var/spool/cron :

$ sudo ls -l /var/spool/cron/
total 0
-rw------- 1 saml root 0 Jun  6 06:43 saml

Você os acessa com o comando crontab -e como um usuário específico. Até a raiz pode ter isso.

Seu problema

O exemplo que você incluiu é o tipo de linha que você especificaria ao criar um tipo de nível de sistema cron . A única diferença é a inclusão do usuário com o qual o comando deve ser executado. Isso não é necessário ao criar um crontab -e do tipo de entrada, pois ele é redundante, já que a entrada crontab já está designada para o usuário que o criou.

Então, basta alterar sua linha para isso:

0 0 * * 1 hostname >> /tmp/hostname.txt

Corrige seu problema.

Como funcionam os crons semanais diários?

Você normalmente verá uma entrada no seu arquivo principal /etc/crontab assim:

01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Estes governam quando os scripts nos diretórios respectivos serão executados. Então o diário é todas as manhãs às 4h20 da manhã, horário local.

Portanto, se você quiser executar o comando hostname >> /tmp/hostname.txt diariamente, deverá colocá-lo em um script, torná-lo executável e colocar o arquivo de script no diretório cron.daily .

/etc/cron.daily/catchhostname.bash

#!/bin/bash

hostname >> /tmp/hostname.txt

cron.daily

# ls -l |grep catch
-rwxr-xr-x 1 root root  118 Feb 28  2013 catchhostname.bash
    
por 17.09.2013 / 05:49
2

Supondo que o que você tem acima é a linha real no crontab do root:

0 0 * * 1 root hostname >> /tmp/hostname.txt

Esta linha irá executar um comando chamado "root" e passar o parâmetro "hostname". Se não houver nenhum nome de comando "root" em / bin ou / usr / bin (o caminho padrão para o cron), você obterá uma saída de arquivo vazia.

    
por 17.09.2013 / 05:36

Tags