Quero escrever um crontab que abra o Firefox a cada minuto (só para testar, sei que não faz sentido). Meu problema é que mesmo que o crontab esteja ativo, nada acontece. Esta é a aparência do meu crontab:
SHELL=/bin/bash
PATH=~/bin:/usr/bin:bin
* * * * * export DISPLAY=:0.0 xhost localuser /usr/bin/firefox
Alguma ideia de por que não está funcionando?
Responder1
export DISPLAY=:0.0 xhost localuser /usr/bin/firefox
Só de olhar para o comando cron acima, posso ver por que ele não funciona. O uso do export
comando é
export name[=word]...
Em shells POSIX, o restante das palavras a seguir export DISPLAY=:0.0
serão tratadas como outras variáveis de shell que devem ser exportadas para o ambiente – e não como comandos que serão executados. POSIX (edição 7, edição de 2018) também especifica que umnomedeveria estar
uma palavra que consiste apenas em sublinhados, dígitos e caracteres alfabéticos do conjunto de caracteres portáteis.
Isso significa que os nomes das variáveis do shell não podem conter caracteres, portanto, /
tentar incluir /usr/bin/firefox
na lista de nomes de variáveis a serem exportados geraria um erro com uma mensagem como not a valid identifier
ou bad variable name
.
Além disso, o xhost
comando é usado incorretamente. Execute xhost
sozinho para ver se você precisa adicionar sua conta de usuário como usuário permitido. Isso só precisa ser executado uma vez e não deve ser agendado pelo cron.
A menos que haja algum outro mecanismo que impeça os programas de se conectarem ao servidor de exibição X, as linhas acima podem simplesmente ser substituídas por:
DISPLAY=:0.0
* * * * * /usr/bin/firefox
Isso deve abrir uma nova janela do Firefox a cada minuto. Também não há necessidade de especificar a SHELL
variável de ambiente – e como você está especificando o caminho completo para o firefox
executável, também não há necessidade de definir a PATH
variável.
Veja também:Especificação POSIX paraexport