O trabalho do Cron não está funcionando

0

Eu tenho um script em ~/.sst/cmd.sh . Captura de tela e salva depois de criar uma data de hierarquia de pastas. Aqui está o conteúdo:

#!/bin/sh
mkdir -p --mode=0755 /home/username/.sst/rslt/$(date +%Y)/$(date +%m)/$(date +%d)/$(date +%H)
scrot '/home/username/.sst/rslt/%Y/%m/%d/%H/%M%S.png'

Então eu configuro como um cron para rodar a cada minuto. Aqui está $ crontab -l

* * * * * /home/username/.sst/cmd.sh

O cron é executado sem problemas. Eu recebo a hierarquia de pastas criadas, mas não há captura de tela no destino. O que poderia estar errado com isso?

Quando o script é executado manualmente a partir do CLI, ele funciona e a captura de tela é gerada.

Eu também tentei colocar o cron no crontab do root. Sem sorte.

    
por 8thperson 20.10.2015 / 04:18

1 resposta

4

Você precisa especificar o X DISPLAY. Você pode fazer isso no seu script.

Modifique seu script para ler:

#!/bin/sh
mkdir -p --mode=0755 /home/username/.sst/rslt/$(date +%Y)/$(date +%m)/$(date +%d)/$(date +%H)
export DISPLAY=:0 && scrot '/home/username/.sst/rslt/%Y/%m/%d/%H/%M%S.png'

A especificação de exibição acima está assumindo que a tela ": 0" é sua exibição ativa X DISPLAY owned by you (de propriedade do usuário executando o crontab).

Existem várias maneiras de especificar o DISPLAY. Você poderia usar como a terceira linha:

env DISPLAY=:0 scrot '/home/username/.sst/rslt/%Y/%m/%d/%H/%M%S.png'

Ou você pode chamar seu script original com uma das muitas variações, incluindo:

* * * * * env DISPLAY=:0 /home/username/.sst/cmd.sh

Você pode substituir /home/username pela variável userhome das duas linhas:

username='whoami'
userhome='egrep "^$username:" /etc/passwd | awk -F: '{print $6}''
    
por L. D. James 20.10.2015 / 04:43