Cron não está funcionando

0

Escrevi um script de shell curto "wallch.sh" para alterar aleatoriamente meu plano de fundo da área de trabalho:

DIR="/home/user/Wallpapers"
PIC=$(ls $DIR/*.jpg | shuf -n1)
FIL="file://"
gsettings set org.gnome.desktop.background picture-uri $FIL$PIC

E copiei para /bin/ e, em seguida, sudo chmod 755 /bin/wallch.sh para ele. Isso pode facilmente ser executado do terminal sem problemas, sem qualquer erro.

No entanto, quando eu adiciono uma linha no crontab (fazendo isso do terminal como usuário), como:

* * * * * /bin/wallch.sh

Isso simplesmente não funcionaria. Teoricamente deveria ter corrido a cada minuto.

/var/log/syslog diz:

Feb 25 19:36:01 user-Ubuntu CRON[11762]: (user) CMD (/bin/wallch.sh # JOB_ID_3)
Feb 25 19:36:01 user-Ubuntu CRON[11761]: (CRON) info (No MTA installed, discarding output)
Feb 25 19:37:01 user-Ubuntu CRON[11790]: (user) CMD (/bin/wallch.sh # JOB_ID_3)
Feb 25 19:37:01 user-Ubuntu CRON[11789]: (CRON) info (No MTA installed, discarding output)
Feb 25 19:38:01 user-Ubuntu CRON[11828]: (user) CMD (/bin/wallch.sh # JOB_ID_3)
Feb 25 19:38:01 user-Ubuntu CRON[11827]: (CRON) info (No MTA installed, discarding output)

Alguma sugestão?

Atualização:

O script que escrevi (observe que alterei o nome do arquivo, agora é /bin/wallch . Além disso, removi as linhas de comentário que começam com # , exceto a shebang):

#!/bin/sh
DIR="/home/user/Wallpapers"
PIC=$(ls $DIR/*.jpg | shuf -n1)
FIL="file://"
gsettings set org.gnome.desktop.background picture-uri $FIL$PIC

A stat /bin/wallch output:

user@user-Ubuntu:~$ stat /bin/wallch
File: '/bin/wallch'
Size: 484           Blocks: 8          IO Block: 4096   regular file
Device: 806h/2054d  Inode: 130389      Links: 1
Access: (4755/-rwsr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2013-02-26 11:03:01.727198732 -0600
Modify: 2013-02-26 10:37:46.727135926 -0600
Change: 2013-02-26 11:02:06.215196433 -0600
Birth: -
user@user-Ubuntu:~$ 

Obrigado por qualquer resposta!

    
por Kazzantra 26.02.2013 / 02:40

2 respostas

4

Sim, você pode instalar qualquer pacote MTA. Se você já tiver um servidor SMTP (MTA) em qualquer lugar que possa usar, escolha nullmailer . Caso contrário, você poderia ir com postfix (requer algum trabalho) ou courier-mta , que também vem com padrões de sane (e é um pouco mais fácil para iniciantes, IMO).

Os nomes de largura fixa acima são nomes de pacotes no Ubuntu. Então, apt-get install <packagename> vai te dar o MTA instalado. O principal problema parece ser que você não configurou nenhum MTA e, portanto, cron não pode enviar e-mails. O trabalho em si não indica erro na saída do log que eu vejo.

Side-note: você também pode suprimir qualquer saída de seus trabalhos anexando (à linha de trabalho):

> /dev/null 2>&1

... e até mesmo suprimir os códigos de saída de erro com o acréscimo (adicional):

|| /bin/true

... Eu não recomendaria isso, no entanto. Também definir MAILTO no seu crontab (veja man 5 crontab ) é outra opção aqui. Mas é meio "global" para o respectivo crontab :

MAILTO=""

Qual cron mails é a saída (stdout / stderr, se encontrar um MTA) da tarefa executada. E isso por padrão, sim. Também códigos de saída de erro (diferente de zero) resultarão na saída sendo enviada pelo correio.

No entanto, ele também precisa ser capaz de executar o trabalho, que em todos os casos exige que o arquivo seja executável ( chmod a+x ... ) ou que, no caso de um script, você preencha o caminho para o interpretador de scripts e no caso de um script, existe uma linha de hashbang adequada no início do arquivo.

    
por 0xC0000022L 26.02.2013 / 02:58
0

use esta linha cron em vez

* * * * * DISPLAY=:0 GSETTINGS_BACKEND=dconf /bin/wallch.sh

também pode usar * / 2 na coluna de hora para uma alteração de segundo plano a cada duas horas (todas as horas pares)

Aviso offtopico: esta não é uma regra apenas um formulário para manter os scripts separados, use /usr/local/bin para seus scripts admin. :)

    
por perdigueiro 02.07.2014 / 13:36