Linux起動時に実行する処理の設定方法

Linuxの起動時に何かの処理を実行させたい場合、/etc/rc.localにスクリプトを記述することでOS起動時にその処理をroot権限で実行することができます。

ちなみに、RedHat7系からは起動時に実行するスクリプトについて、systemd サービスまたは udev ルールを使うことが推奨されていますが、/etc/rc.localに記載しても問題なく動作します。

viで/etc/rc.localを開きます

$ vi /etc/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local

起動時のコマンドやスクリプトの記述は「touch /var/lock/subsys/local」の次の行以降に内容を書いていきます。
今回はコマンドの実行を直接書いてみます。

#!/bin/bash
touch /var/lock/subsys/local
#以下追記内容
echo "start" >> /var/log/start.log
date         >> /var/log/start.log
echo "end"   >> /var/log/start.log

OSを再起動してログを確認してみましょう

即時シャットダウンコマンド
# shutdown -r now
# less /var/log/start.log

------------------
以下/var/log/start.logの内容
------------------

start
Mon Aug  9 13:48:40 JST 2021
end

/etc/rc.localに記載したコマンドが起動時に実行されログファイルに追記されていることを確認できました。

シェルスクリプトを実行させたい場合

コマンドを直接記述ではなく予め作成したシェルを実行したい場合はそのシェルスクリプトを実行するコマンドを記載します。

#!/bin/bash
touch /var/lock/subsys/local

#以下シェルスクリプトの実行コマンドを追記
sh /opt/test/satartTest.sh

起動時に/etc/rc.localに記載したスクリプトが実行されない場合

/etc/rc.localの実行権限が実行可能状態になっていないことがあるので実行権限を確認して、実行可能権限の設定を行います。

# ls -lh /etc/rc.local 
lrwxrwxrwx 1 root root 13 Aug  8 17:05 /etc/rc.local -> rc.d/rc.local

実行可能権限はあるが「/etc/rc.local」は「etc/rc.d/rc.local」のシンボリックリンクなので、シンボリック元の権限もチェックしてみる

# ls -lh /etc/rc.d/rc.local 
-r--r--r-- 1 root root 647 Aug  8 17:09 /etc/rc.d/rc.local

/etc/rc.d/rc.localに実行権限が付いてない場合はchmodで実行権限を付与します

# sudo chmod 744 /etc/rc.d/rc.local 
# ls -lh /etc/rc.d/rc.local 
-rwxr--r-- 1 root root 647 Aug  8 17:10 /etc/rc.d/rc.local

実行権限を付与したら起動時の動作を確認するために、OSを再起動してみましょう。

Leave a Reply

Your email address will not be published. Required fields are marked *