O Terminal Gnome é uma aplicação X (aplicação GUI). Se você quiser executar qualquer aplicativo X do cron, apenas "informe-o" qual display você está usando, pois cron
não executa comandos dentro do seu ambiente normal de shell.
Antes de mais nada, detecte qual display está sendo usado em seu sistema:
echo $DISPLAY
A saída será algo assim:
:0
ou
:1
Vamos supor que sua variável DISPLAY
seja :1
e, em seguida, adicione ao seu script antes do comando com o aplicativo da GUI DISPLAY=:1
variable, por exemplo:
#!/bin/bash
DISPLAY=:1 gnome-terminal -x sh -c 'zenity --info --text="Msg1" --title="Text1..." --timeout=10;<some_command>;zenity --info --text="Msg2" --title="Text2..." --timeout=10;<some_command>;zenity --info --text="Msg3" --title="Reboot..." --timeout=10;sleep 1; exec bash'
Além de cron
, há outra possibilidade no CentOS de executar algo assim na inicialização do sistema - rc-local
service mechanism. Criar (se ainda não foi criado) arquivo:
/etc/rc.d/rc.local
com o conteúdo:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/path/to/script.sh
exit 0
Coloque no arquivo todos os comandos que você deseja executar na inicialização.
Torne o arquivo rc.local
executável:
chmod +x /etc/rc.d/rc.local
Ative o rc-local
service e inicie-o:
systemctl enable rc-local
systemctl start rc-local
Verifique se o serviço está funcionando corretamente:
systemctl status rc-local