Por que colocar um script em /etc/cron.hourly não está funcionando?

11

Eu coloquei um script executável em /etc/cron.hourly , mas esse script não foi executado a cada hora, na verdade, ele nunca é executado.

Aqui está o script (som de hora) que eu fiz:

#!/bin/bash
mplayer ~/Music/sfx_msg-highlight.wv &> /dev/null &
spd-say -r -50 -p 50 -t male3  "The time now is $(date +"%l %p")"
notify-send "It's: " "$(date +"%l %p") now." -i ~/Pictures/"first tee.png" -t 5000

Meu crontab é:

DISPLAY=":0.0"
XAUTHORITY="/home/naruto/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"

0 * * * * /home/naruto/Hour-sound.sh

Enquanto os comandos mplayer e spd-say são executados corretamente, o notify-send não é. Eu também tentei redirecionar o erro para um arquivo:

0 * * * * /home/naruto/Hour-sound.sh 2>/tmp/error

Mas isso não mostrou saída. O que estou fazendo errado?

    
por Black Block 19.04.2015 / 19:15

3 respostas

16

Como você provavelmente já viu nos comentários à sua pergunta, os cronjobs em /etc/cron.hourly (e os outros diretórios semelhantes) são executados por run-parts . run-parts é um pouco exigente sobre nomes de arquivos. Por padrão, ele não executa arquivos cujos nomes de arquivos contêm algo diferente de (todos aqueles de ASCII)

  • letras maiúsculas
  • letras minúsculas
  • dígitos
  • sublinhados
  • traços ("sinais de menos")

Portanto, se o seu script tiver um nome de arquivo de, por exemplo, "myscript.sh", ele será ignorado, porque run-parts não gosta do ponto.

    
por Henning Kockerbeck 20.04.2015 / 00:05
4

Um problema é que você está tentando executar um aplicativo gráfico ( notify-send ) do cron. Isso leva um pouco de ajustes. Você precisa definir XAUTHORITY e DISPLAY variáveis no crontab para que ele possa se conectar à sua sessão X em execução e você precisa definir XDG_RUNTIME_DIR para que possa se conectar à sua sessão pulseaudio. Infelizmente, eles precisam ser definidos no próprio crontab, portanto você não pode usar /etc/cron.hourly . Em vez disso, execute crontab -e e adicione estas linhas:

DISPLAY=":0.0"
XAUTHORITY="/home/YOURUSERNAME/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"

0 * * * * /path/to/script.sh 

Altere o valor de XDG_RUNTIME_DIR para o que for retornado quando echo de um terminal. No meu sistema, isso é:

$ echo $XDG_RUNTIME_DIR
/run/user/1001

Provavelmente será o mesmo no seu, mas verifique primeiro. Agora, seu script será executado a cada hora e deverá funcionar conforme o esperado.

    
por terdon 21.04.2015 / 12:28
2

Um script que termina com .sh não é executado na pasta /etc/cron.hourly :

  

link
  Links ou binários dentro de um diretório manipulado por run-pars (como   /etc/cron.daily) não será executado se um período fizer parte de seu nome.

renomeie o script

mv /etc/cron.hourly/Hour-sound.sh /etc/cron.hourly/Hour-sound

ou coloque a chamada do script em

/etc/crontab

que permite o .sh final

    
por rubo77 29.09.2015 / 20:49

Tags