Além de Crontab não está funcionando

1

Eu tenho passado por muitas respostas sobre como adicionar um crontab através do terminal através de um forro e encontrei apenas uma única opção em todos os lugares que é

{crontab -l; echo "1 * * * * /usr/bin/firefox" } | crontab -

Executando tudo o que estou recebendo é

>

É isso. Um promt para eu digitar algo.

e segunda opção sendo

(crontab -l; echo "1 * * * * /usr/bin/firefox" ) | crontab -

O que parece adicionar o cron a /var/spool/cron/crontabs/root , mas não abre firefox a cada minuto, na verdade ele não abre de forma alguma.

Eu li mais na maioria das respostas que você não deve editar os arquivos /var/spool/cron/crontabs/root ou /etc/crontab diretamente.

Isto não é suportado no meu sistema ou o quê?

Uma saída de uname -a deu a seguinte descrição do meu sistema

Linux earth 4.9.0-kali4-amd64 #1 SMP Debian 4.9.30-2kali1 (2017-06-22) x86_64 GNU/Linux

EDITAR: os seguintes registros de mensagem são repetidos com frequência em meus /var/spool/mail/mail logs

From [email protected] Sun Jul 09 16:01:12 2017 
Return-path: < [email protected] > 
Envelope-to: [email protected] 
Delivery-date: Sun, 09 Jul 2017 16:01:12 +0530 
Received: from root by earth with local (Exim 4.89)   
    (envelope-from <[email protected]>)  
    id 1dU9UY-0001Ry-3A   
    for [email protected]; Sun, 09 Jul 2017 16:01:06 +0530 
From: [email protected] (Cron Daemon) 
To: [email protected] 
Subject: Cron <root@earth> /usr/bin/firefox 
MIME-Version: 1.0 
Content-Type: text/plain; charset=UTF-8 
Content-Transfer-Encoding: 8bit X-Cron-Env: < SHELL=/bin/sh > 
X-Cron-Env: < HOME=/root > 
X-Cron-Env: < PATH=/usr/bin:/bin > 
X-Cron-Env: < LOGNAME=root > Message-Id: < E1dU9UY-0001Ry-3A@earth > 
Date: Sun, 09 Jul 2017 16:01:06 +0530

Error: GDK_BACKEND does not match available displays
    
por GypsyCosmonaut 08.07.2017 / 23:18

2 respostas

2

O mais provável é que sua segunda tentativa esteja correta, mas sua expectativa está errada.

Vamos ver em algumas partes:

crontab -l

lista todas as entradas existentes para o crontab do usuário atual. O

echo "1 * * * * /usr/bin/firefox"

apenas imprime essa linha novamente. Estes dois comandos são então agrupados em um subshell e a saída comum é canalizada para

crontab -

Assim, o crontab é sobrescrito pelo que vem através da entrada padrão, que neste caso é o crontab antigo mais a nova entrada.

Como você disse, ele é adicionado ao arquivo crontab. E, supondo que o daemon cron esteja em execução, o comando será executado a cada minuto.

Então, por que você não está vendo uma janela do firefox a cada minuto? - Como o conrjob é executado em um shell diferente abaixo do daemon do cron, que não tem acesso à sua sessão X, o firefox falhará e reportará algo como

(firefox:22376): Gtk-WARNING **: Locale not supported by C library.
    Using the fallback 'C' locale.
Error: GDK_BACKEND does not match available displays

E termine. Como ver esse erro? Normalmente, o daemon do cron tentará enviar um email para você, veja /var/spool/mail eventualmente.

Sobre as duas formas:

{ crontab -l; echo "1 * * * * /usr/bin/firefox" } | crontab -

teria que ser escrito como

{ crontab -l; echo "1 * * * * /usr/bin/firefox"; } | crontab -

(note o ponto e vírgula extra)

A diferença entre () e {} é que o primeiro cria um sub-shell, enquanto o último executa os comandos no mesmo contexto do shell. Assim, as atribuições variáveis sobrevivem de uma forma, não da outra.

    
por 08.07.2017 / 23:45
0

Eu estava recebendo o mesmo erro ao tentar ter firefox-esr iniciado a partir de um trabalho cron.

Definindo DISPLAY right dentro do arquivo cron ajudou embora :

* * * * * pi export DISPLAY=:0 && /usr/bin/firefox-esr &

(Certifique-se de descobrir o número real de DISPLAY fazendo echo $DISPLAY )

    
por 24.08.2018 / 22:21

Tags