Como usar o gnome-session-save do cron?

0

Estou tentando emitir o comando gnome-session-save --kill via crontab. Eu usei o comando sudo crontab -e . No arquivo é isto:

PATH=/usr/bin
00 00 * * * gnome-session-save --kill

O comando não é executado como deveria. /var/log/syslog mostra que ele está sendo executado com sucesso.

No comando eu também tentei o caminho completo para o comando ( /usr/bin/gnome-session-save --kill ) sem qualquer sorte.

Ubuntu 10.04LTS

    
por Mechaflash 22.08.2011 / 21:20

4 respostas

0

Caleb estava certo sobre passar a variável de exibição correta. Eu também usei crontab -e em vez de SUDOing. No Ubuntu, tudo o que você precisa fazer é especificar qual display deve passar no Crontab. Então meu comando é assim:

00 18 * * * env DISPLAY=:0 gnome-session-save --kill

o env DISPLAY =: 0 é o que diz para passar o cronjob para a exibição atual (desktop). Como alternativa, se você tiver várias exibições, poderá especificar qual exibição será transmitida usando um decimal (0.0 = display 1, 0.1 = display 2 etc.)

link

Sim, usei o cache da web do Google porque a página não estava sendo carregada corretamente para mim = D.

    
por 23.08.2011 / 15:39
3

Primeiro, você não deve usar sudo crontab -e para isso. Isso irá editar o arquivo crontab para o usuário root. Você precisa disso para rodar em seu crontab de usuário para que a sessão do gnome que é salva seja sua. Largue o sudo e apenas execute crontab -e . Se necessário, adicione-se ao arquivo cron.allow para que você tenha permissão para ter um arquivo crontab como usuário. (Lembre-se também de editar o crontab do root novamente e remover essa entrada.)

Em segundo lugar, você não pode executar coisas como utilitários gnome do cron sem conectá-los com as variáveis $DISPLAY corretas. O ambiente que o cron transmite para seus filhos não é tão completo quanto um shell de login e, como não é executado dentro de seu ambiente de login gráfico, ele não está conectado a ele. Considere isso: é possível ter mais de um ambiente gráfico em execução. Como um script de sistema saberia em qual delas você deseja operar? Não faz. Você precisa descobrir qual DISPLAY está sendo executado e passar isso para o seu comando.

Por último, parece que TODO o lugar errado para fazer isso de qualquer maneira. Por que diabos você quer periodicamente matar uma sessão? Qualquer coisa que o usuário esteja fazendo nesse momento será eliminado. O cron também executa se o usuário está logado ou não, então pode nem sempre ter algo para operar.

    
por 23.08.2011 / 10:35
0

Como Pavel Selivanov aponta neste article é necessário definir DBUS_SESSION_BUS_ADDRESS e DISPLAY para ativar tarefas relacionadas a gui a partir de um cronjob.

Ele escreveu um shell script, que obtém o DBUS_SESSION_BUS_ADDRESS para o XFCE, o Gnome, o Unity, o Cinnamon e o KDE. Posso confirmar que funciona em ubuntu:16.04 .

$ sudo nano /usr/local/bin/gui-cron

#!/bin/sh
[ "$#" -lt 1 ] && echo "Usage: $0 program options" && exit 1

program="$1"
shift

user=$(whoami)
env_reference_process=$( pgrep -u "$user" xfce4-session || pgrep -u "$user" cinnamon-session || pgrep -u "$user" gnome-session || pgrep -u "$user" gnome-shell || pgrep -u "$user" kdeinit )

export DBUS_SESSION_BUS_ADDRESS=$(cat /proc/"$env_reference_process"/environ | grep -z ^DBUS_SESSION_BUS_ADDRESS= | sed 's/DBUS_SESSION_BUS_ADDRESS=//')
export DISPLAY=$(cat /proc/"$env_reference_process"/environ | grep -z ^DISPLAY= | sed 's/DISPLAY=//')
"$program" "$@"

Em seguida, pode-se criar um cronjob do usuário que é executado por um determinado cronograma com a sintaxe crontab. Aqui, por exemplo, a cada 15 minutos entre 22:00 e 05:59:

$ crontab -e

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
*/15 22-23,00-05 * * * gui-cron gnome-session-quit --power-off
    
por 18.06.2017 / 15:35
-1

Eu vi um tipo semelhante de erro. Se você colocar apenas esse comando em um script de shell e depois adicionar esse script de shell ao cron, ele funcionará. Crie algo como killGnome.sh

#!/bin/sh
gnome-session-save --kill

Certifique-se de fornecer as permissões de execução acima. E então no seu crontab adicione isto:

00 00 * * * /path/to/killGnome.sh

Não sei bem por que. : | Edita bem-vindo.

    
por 22.08.2011 / 22:43

Tags