web-dev-qa-db-ja.com

再起動後にコマンド/スクリプトを1回実行する方法

Centos6にはこのスクリプトがあり、ターミナルで再起動した後に1回実行する必要があります。
これどうやってするの?
sh /path/to/script.shのように実行した場合-すべて問題ありませんが、rc.localsh /path/to/script.sh)またはcrontab@reboot sh /path/to/script.sh)を追加した場合-何も起こりません。
どんな助けでも喜んでいます。

#!/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'
1
Oleg Kalinin

Gnome TerminalはXアプリケーション(GUIアプリケーション)です。 cronからXアプリケーションを実行する場合は、cronが通常のシェル環境内でコマンドを実行しないため、使用しているディスプレイを「彼に知らせてください」。

まず、システムで使用されているディスプレイを検出します。

echo $DISPLAY

出力は次のようになります。

:0

または

:1

DISPLAY変数が:1であると仮定し、GUIアプリケーションDISPLAY=:1変数を使用してコマンドの前にスクリプトに追加します。

#!/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'

cronの他に、CentOSには、システムの起動時に何かを1回実行する別の可能性があります-rc-localサービスメカニズム。ファイルの作成(まだ作成されていない場合):

/etc/rc.d/rc.local

内容:

#!/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

起動時に実行したいすべてのコマンドをファイルに入れます。

rc.localファイルを実行可能にします。

chmod +x /etc/rc.d/rc.local

rc-localサービスを有効にして、開始します。

systemctl enable rc-local
systemctl start rc-local

サービスが正しく実行されているかどうかを確認します。

systemctl status rc-local
1
Bob