あお日記

理系研究者のブログです。勉強したことや本の感想などを中心に残して行くつもりです。

rc.localの実行権限とsuによるユーザー切り替えで詰まった

ブログ完全に放置してましたが詰まったのでメモ代わりに。
本は少しずつ読んでるのでまた書こう。

仮想マシン起動時にシェルスクリプトを走らせたくてrc.local内にシェルスクリプトを記述して実行していたら詰まった。

rc.localはマシン起動直後に実行されるファイルで、シェルスクリプトを記述できる。rc.local内のコマンドはrootとして実行され、rc.localの編集もroot権限が無いとできない。

今回rc.local内ではrootで実行したいコマンド commandAと一般ユーザhogeで実行したいコマンド commandBがあり、

#!/bin/sh

commandA    #rootとして実行される
su -l hoge  #一般ユーザhogeに切り替え
commandB    #hogeとして実行したい!

としていたがここで詰まった。

su -l hoge とした段階で次の行の実行権限が無くなり処理が止まってしまった。

解決策としては別途commandBを実行するシェルスクリプトfugaB.shを用意し、

#!/bin/sh

commandA
su -l hoge -c 'sh fugaB.sh'

とする事で解決した。

ちなみに途中で権限エラー(多分)が起こって処理が止まった場合マシンが起動せず死ぬ。
この時はマシンをシングルユーザーモードで起動したらrc.localを再編集できた。

CentOS】強制的にシングルユーザーモードで起動する
http://infrakeise.blog92.fc2.com/blog-entry-151.html