executando um shell a cada minuto usando cron

2

Eu quero rodar esse código bash a cada minuto usando o cron. Eu salvei em /root/activate.sh

#!/bin/bash

for file in /home/user/torrents/*.torrent

do
if [ "$file" != "/home/user/torrents/*.torrent" ]; then
echo ['date'] "$file" added to queue. >> /var/log/torrentwatch.log
/usr/bin/transmission-remote localhost:9091 -a "$file"
mv "$file" "$file".added
sleep 1
fi
done

a permissão está definida -rwxrwxrwx 1 root root 278 May 27 01:27 activate.sh

então dentro do meu crontab -e i coloquei isto

* * * * * root sh /root/activate.sh

o script não é executado e recebo esse erro de log

May 27 01:40:02 media CRON[3556]: (root) CMD (root sh /root/activate.sh)
May 27 01:40:02 media CRON[3555]: (CRON) info (No MTA installed, discarding output)
---after a minute---
May 27 01:41:01 media CRON[3582]: (root) CMD (root sh /root/activate.sh)
May 27 01:41:01 media CRON[3581]: (CRON) info (No MTA installed, discarding output)
    
por user1666411 26.05.2013 / 20:01

2 respostas

4

Primeiro, por que você não está apenas usando o recurso watch-dir da transmissão?

A entrada crontab está errada, deve ser * * * * * /root/activate.sh quando você a adiciona com crontab -e . /etc/crontab e /etc/cron.d/* possuem um campo de nome de usuário extra, mas os crontabs específicos do usuário que você configurou com o comando crontab não possuem um campo de nome de usuário; as tarefas são executadas como o usuário que executou crontab .

Além disso, como esse script opera em arquivos no homedir do usuário, eu teria executado o trabalho como esse usuário. Não há nada sobre esse script que requer permissões de root, além de talvez escrever para esse arquivo de log, mas você pode apenas alterar a propriedade desse logfile.

Quanto ao script, eu modificaria um pouco:

#!/bin/bash

for file in ~user/torrents/*.torrent; do
    [[ -f "$file" ]] || continue
    transmission-remote -a "$file" && mv "$file" "$file.added" || continue
    printf '[%s] %s added to queue\n' "$(date)" "$file"
    sleep 1
done >> /var/log/torrentwatch.log

Por último, você deve evitar adicionar extensões para scripts e, especialmente, não usar .sh quando o script for um script bash, não um script sh.

    
por geirha 26.05.2013 / 20:12
2

Ao usar crontab -e , você não pode especificar um nome de usuário. O formato é:

m h  dom mon dow   command

Então você deve colocar isso em crontab -e :

* * * * * /root/activate.sh

Você não precisa usar sh porque o arquivo tem permissão de execução e uma linha shebang (#! / bin / bash).

    
por Eric Carvalho 26.05.2013 / 20:12