Centos6にはこのスクリプトがあり、ターミナルで再起動した後に1回実行する必要があります。
これどうやってするの?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'
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