Centos6には、端末の再起動後に一度実行する必要があるこのスクリプトがあります。
どうすればいいですか?
これを実行するとsh /path/to/script.sh
すべてが正常ですが、rc.local
(sh /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
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'
これに加えて、CentOSには、システム起動時に何かを一度実行できる別の可能性、つまりサービスメカニズムがcron
あります。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