Cron não funciona

Cron não funciona

Escrevi um pequeno script de shell "wallch.sh" para alterar aleatoriamente o plano de fundo da minha á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 depois sudo chmod 755 /bin/wallch.shpara ele. Isso poderia ser executado facilmente no terminal sem nenhum erro.

Porém quando adiciono uma linha no crontab (fazendo isso no terminal como usuário), como:

* * * * * /bin/wallch.sh

Simplesmente não funcionava. Teoricamente, deveria ter funcionado a cada minuto.

/var/log/syslogdiz:

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?

Atualizar:

O script que escrevi (observe que mudei o nome do arquivo, agora é /bin/wallch. Além disso, removi as linhas de comentários começando com #exceto o 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/wallchsaída:

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!

Responder1

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-mtaque vem com padrões sensatos também (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>você terá o MTA instalado. O principal problema parece ser que você não configurou nenhum MTA e, portanto, cronnão pode enviar mensagens. O trabalho em si não indica erro na saída do log que posso ver.

Observação lateral: você também pode suprimir qualquer saída de seus trabalhos anexando (à linha do trabalho):

> /dev/null 2>&1

... e até mesmo suprimir códigos de saída de erro com acréscimos (mais):

|| /bin/true

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

MAILTO=""

Quais crone-mails são a saída (stdout/stderr, se encontrar um MTA) do trabalho que ele executou. E faz isso por padrão, sim. Além disso, códigos de saída de erro (diferentes de zero) resultarão no envio da saída por correio.

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

Responder2

use esta linha cron em vez disso

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

também poderia usar */2 na coluna da hora para uma mudança de plano de fundo a cada duas horas (todas as horas pares)

Conselho offtopic: esta não é uma regra, apenas um formulário para manter os scripts separados, use /usr/local/binscripts de administrador para você. :)

informação relacionada