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

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

Centos6には、端末の再起動後に一度実行する必要があるこのスクリプトがあります。
どうすればいいですか?
これを実行すると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

Gnome TerminalはXアプリケーション(GUIアプリケーション)です。 cronでXアプリケーションを実行するには、どのモニタを使用しているかを「お知らせください」。cron通常のシェル環境ではコマンドが実行されないためです。

まず、システムでどのモニターが使用されているかを検索します。

echo $DISPLAY

出力は次のとおりです。

:0

または

:1

DISPLAY変数が:1GUIアプリケーション変数を使用してコマンドの前にスクリプトに追加されたとします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

おすすめ記事