cron não escreve no arquivo

3

Acabei de começar com tarefas cron e queria começar com uma tarefa fácil. Crie um arquivo na minha pasta pessoal com a saída do ifconfig . Então criei test.sh , o que tornei executável com:

#!/bin/bash          
ifconfig > /home/myname/ipt

por dentro. Quando eu o executo do terminal, ele cria o arquivo ipt , que tem a saída ifconfig .

Para adicionar o script no meu crontab , digitei:

sudo crontab -e

e eu adicionei meu script assim:

* * * * * /home/myname/test.sh

e no primeiro minuto cria o arquivo ipt que tem um ícone de cadeado que é somente para leitura e dentro está vazio.

Existem duas perguntas:

1º Por que está vazio?

Por que é um arquivo somente leitura?

    
por trelozakinthinos 17.12.2015 / 20:38

2 respostas

2

Por favor, tente o que o @heemayl disse, use o caminho completo no seu test.sh :

/sbin/ifconfig >/home/myname/ipt

Explicação

No prompt de comando e na execução de scripts, você está fazendo isso, pois o usuário possui determinados recursos, como

  • a variável $ PATH inclui /sbin/ para poder "saber" sempre que pedir ifconfig se referir a /sbin/ifconfig

Cron no entanto não é o mesmo usuário exato que você

  • assim, quando o cron tenta rodar, ele não sabe onde ifconfig é
  • a menos que você especifique exatamente onde: /sbin/ifconfig

O efeito de não saber onde um programa está, você pode testar por si mesmo, tente executar um programa que não existe em seu prompt de comando:

$ doesnotexist > ipt2
bash: doesnotexist: command not found

Observe quando você:

$ ls -lh ipt2
-rw-r--r-- 1 youruser youruser 0 Dec 17 14:48 ipt2

É um

  • arquivo de 0 bytes
  • somente leitura

Este é exatamente o mesmo resultado que você encontrou originalmente com o crontab, onde ele não sabia o que é ifconfig , resultando em um arquivo de 0 byte, na maioria apenas de leitura.

Portanto, no cron, ajude-o a encontrar o programa apenas dando-lhe o caminho completo e, desde que você não tenha problemas de permissão, ele deve funcionar.

    
por clarity123 17.12.2015 / 20:51
0

Responda no 1:

O arquivo estava vazio porque eu não dei o nome completo do comando graças a @heemayl e @ user454038

Responda no 2:

O arquivo foi lido somente porque eu criei um cronjob como root e eu estava tentando abri-lo como usuário

sudo crontab -e

mas eu apenas tive que criar como usuário sem sudo

crontab -e

Então, trabalhando como usuário, o arquivo .sh seria

/sbin/ifconfig > ipt

e o crontab

* * * * * $HOME/test.sh

e eu uso a variável $HOME para meu usuário novamente.

Isso cria o arquivo que eu queria sem permissões erradas.

Obrigado a todos pela sua ajuda.

    
por trelozakinthinos 18.12.2015 / 00:33

Tags