Como executar o comando / script uma vez após a reinicialização

1

No Centos6 eu tenho esse script e preciso executá-lo uma vez após a reinicialização no terminal.
Como posso fazer isso?
Se eu executar como sh /path/to/script.sh - tudo bem, mas se eu adicionar rc.local ( sh /path/to/script.sh ) ou crontab ( @reboot sh /path/to/script.sh ) - nada acontece. Eu ficarei feliz em ajudar.

#!/bin/bash
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'
    
por Oleg Kalinin 24.07.2018 / 08:10

1 resposta

1

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
    
por 24.07.2018 / 09:07