Coloquei um script executável /etc/cron.hourly
, mas esse script não era executado a cada hora, na verdade, nunca é executado.
Aqui está o script (som da hora) que eu fiz:
#! / bin / bash mplayer ~ / Música / sfx_msg-destaque.wv &> / dev / null & spd-say -r -50 -p 50 -t male3 "A hora é agora $ (data +"% l% p ")" notifique-envie "It's:" "$ (date +"% l% p ") agora." -i ~ / Imagens / "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 resultado. O que estou fazendo de errado?
/etc/crontab
tem arun-parts
linha para a execução de hora em horacron
empregos a partir do diretório?/etc/crontab
arquivo tem a linha17 * * * * root cd / && run-parts --report /etc/cron.hourly
?Respostas:
Como você provavelmente já viu nos comentários da sua pergunta, os cronjobs
/etc/cron.hourly
(e os outros diretórios similares) são executados porrun-parts
.run-parts
é um pouco exigente quanto aos nomes de arquivos. Por padrão, ele não executa arquivos cujos nomes de arquivos contêm nada além de (todos aqueles do ASCII)Portanto, se o seu script tiver um nome de arquivo, por exemplo "myscript.sh", ele será ignorado, porque
run-parts
não gosta do ponto.fonte
/etc/cron.hourly
não são necessariamente executados "na hora"? Se o seu cronjob/etc/crontab
tiver 17 na posição de minutos, os scripts serão executados às 00:17, 01:17 e assim por diante. E, novamente, por precaução, as permissões do script permitem que o usuário root as execute?/etc/cron.d/
não devem ter permissões de gravação ou execução para "grupo" ou "outros". "owner" precisa executar permissão, "group" e "others" devem ter apenas permissão de leitura. Talvez isso se aplique/etc/cron.hourly
também, embora eu não tenha testado isso.Um problema é que você está tentando executar um aplicativo gráfico (
notify-send
) no cron. Isso leva um pouco de ajustes. Você precisa definirXAUTHORITY
eDISPLAY
variáveis no crontab para que ele possa se conectar à sua sessão X em execução e você precisa definirXDG_RUNTIME_DIR
para que ele possa se conectar à sua sessão do pulseaudio. Infelizmente, eles precisam ser definidos no próprio crontab, para que você não possa usá-lo/etc/cron.hourly
. Em vez disso, executecrontab -e
e adicione estas linhas:Altere o valor de
XDG_RUNTIME_DIR
para o que for retornado quando você o fizerecho
a partir de um terminal. No meu sistema, é o seguinte:Provavelmente será o mesmo no seu, mas verifique primeiro. Agora, seu script será executado a cada hora e deve funcionar conforme o esperado.
fonte
notify-send
tem oXAUTHORITY
eDISPLAY
variáveis a serem definidos e ii)mplayer
tem aXDG_RUNTIME_DIR
ser conjunto. Você tentou minha sugestão? Isso deve corrigir os dois problemas. Você provavelmente também teve problemas de nomeação devido aosrun-parts
explicados na outra resposta./etc/crontab
, não faça isso. Você deseja que isso seja executado como seu usuário, não como root e esse arquivo tem um formato diferente de qualquer maneira. Basta fazer o que eu disse na minha resposta, executarcrontab -e
e adicionar as linhas lá.Um script que termina com
.sh
não é executado na/etc/cron.hourly
pasta:renomeie o script
ou coloque a chamada de script em
o que permite o
.sh
finalfonte
Não use script com extensão (abc.sh) e adicione o local necessário. (cron.horas).
adicione seu código ao arquivo abc e salve. (para sua necessidade) (este deve ser o comando bash)
usar
comando para criar arquivo executável.
há algumas linhas predefinidas. edite da linha de minutos para horas e salve-a.
então ele funcionará corretamente.
fonte