Meu script corre bem quando eu o executo a partir do terminal, mas não funciona com o cron. Por quê?

2

Estou criando um script para gerenciar meus ícones e estou usando o comando gvfs-set-attribute para fazer isso. O script funciona bem quando eu o executo com o terminal, mas ele não funciona quando eu uso cron . Aqui está uma versão simplificada do meu problema:

#!/bin/bash

PATH=/home/myUser/bin:/home/myUser/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/home/myUser/.local/share/gvfs-metadata

gvfs-set-attribute -t string /home/myUser/myFolder metadata::custom-icon file:///home/myUser/myImage.png

Eu usei crontab -e e ajustei meu script para executar cada minuto * * * * * /home/myUser/script.bash . O problema é que esse script não funciona quando eu o executo com cron .

Eu já escrevi o PATH no meu script, conforme descrito em este outro problema e a saída do comando whereis gvfs-set-attribute é:

gvfs-set-attribute: /usr/bin/gvfs-set-attribute /usr/share/man/man1/gvfs-set-attribute.1.gz

Então, suponho que não há nada errado com o PATH aqui. Eu também tentei executar meu script diretamente com o caminho absoluto: /usr/bin/gvfs-set-attribute . Mas qualquer uma dessas coisas funcionou ... Alguém tem alguma idéia do que está acontecendo e porque eu não posso usar o comando gvfs-set-attribute com cron ?

    
por Ramuyko 23.05.2018 / 01:56

2 respostas

1

Tente adicionar esta linha ao seu script (obviamente antes da chamada para gvfs-set-attribute ):

export $(cat /proc/$(pgrep gnome-session)/environ | grep -z ^DBUS_SESSION_BUS_ADDRESS)

Ele pega a variável de ambiente DBUS_SESSION_BUS_ADDRESS da sua sessão do gnome existente. Isso faz duas suposições:

  1. Você está executando uma sessão do gnome; e
  2. Existe apenas uma sessão do gnome

Se houver várias sessões gnome (ou seja, uma para vários usuários), você poderá alterar essa linha para trabalhar para um usuário específico adicionando a opção -u a pgrep . Por exemplo:

export $(cat /proc/$(pgrep gnome-session -u myUser)/environ | grep -z ^DBUS_SESSION_BUS_ADDRESS)

Se você não está usando o gnome - então eu acho que isso funcionará com outros ambientes de desktop, substituindo gnome-session por outro valor - como lxsession para o LXDE.

    
por Brendan McGrath 23.05.2018 / 07:58
1

cron jobs não são executados no sistema X window e normalmente não acessam objetos GUI.

No entanto, você pode trapacear.

Em um terminal, executando sob a GUI:

xhost +localhost

echo "export DISPLAY=\"$DISPLAY\"" >$HOME/.display

E, perto do início do trabalho cron :

source $HOME/.display

Leia man xhost .

    
por waltinator 23.05.2018 / 04:11