rc.localでスクリプト自動処理を行ったことのある方に質問させてください。
概要を先に言うと、前は問題なく実行されていたのに、シェルスクリプトに手を加えた辺りから実行されなくなった、です。ディレクトリ等々変更したことはページ下方、■その他に記してあります。
/etc/rc.d/rc.localにシェルスクリプトを追加し、サーバーの起動時に追加したスクリプトを自動起動させたいのですが、どうも追加したファイルそのものを認識して実行しておりません。
その理由として、
cat /etc/rc.d/rc.local
#!/bin/bash # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. touch /var/lock/subsys/local echo "before" >> /home/ec2-user/test.log #rc.localを読み込んでいるかのログ sh /home/ec2-user/hogefuga.sh #自動起動させたいスクリプト echo "after" >> /home/ec2-user/test.log #自動起動スクリプトが完了したかを見るログ
このように設定しインスタンスの再起動をしてもログにはbeforeしか現れず、更に、
cat /home/ec2-user/hogefuga.sh
#!/bin/bash echo "in" >> /home/ec2-user/script_error.log # --- 設定 --- HOSTNAME=`hostname` DATE=`date` NUM=`ps aux | grep run_product_ | grep -v grep | wc -l` #特殊なケースの二重起動防止 if [[ ${NUM} > 2 ]]; then echo -e "[ERROR] OTHER SCRIPT ALREADY RUNNING. PLEASE CHECK PROCESS." echo ${NUM} ps aux | grep run_product_ | grep -v grep exit 1 fi sudo -u ec2-user bash << EOF #ここからは運用上ec2-userとして実行したい # --- ホスト名で他OEMのスクリプト起動チェック防止 --- if [ ${HOSTNAME} != 'ip-00-000-0-000' ]; then echo "[ERROR] THIS SCRIPT C'ANT BE USED IN THIS HOST" echo "${DATE} - [ERROR] This is not correct script.Please confirm relation between OEM and script." > /home/ec2-user/script_error.log exit 1 fi echo "**********" echo "********** run.sh $ENVIRONMENT start **********" echo "**********" cd /home/ec2-user/git/ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ EOF #ec2-userここまで
このように起動させたいスクリプトの一番上にひとまずログを吐き出すように設定しても、
通っていないのかログすら出力されない次第であります。
従って今回rc.localは実行されているが、起動させたいスクリプトは読み込まれていないと判断致しました。
■私が確認した項目
・/etc/rc.d/rc.localの実行権限(問題なし)
・自動起動ではなく手動起動での/home/ec2-user/hogefuga.sh実行(手動だとスクリプトは問題なく実行される)
・/etc/rc.d/rc.localへのbash /home/ec2-user/hogefuga.sh記述トライ(sh時と変わらず不動)
・起動しようとしているスクリプトの権限(775で問題なし)
■その他
・今回実装するにあたって、既存の同ディレクトリ、同ファイルをディレクトリのリネームをしてバックアップとして補完、新しいものをgit cloneしそちらにシェルスクリプトの変更を適用。
・既存のシェルスクリプトで自動起動をrc.localに施すと問題なく起動する。
・スクリプトの変更点は、
#特殊なケースの二重起動防止 if [[ ${NUM} > 2 ]]; then echo -e "[ERROR] OTHER SCRIPT ALREADY RUNNING. PLEASE CHECK PROCESS." echo ${NUM} ps aux | grep run_product_ | grep -v grep exit 1 fi sudo -u ec2-user bash << EOF #ここからは運用上ec2-userとして実行したい # --- ホスト名で他OEMのスクリプト起動チェック防止 --- if [ ${HOSTNAME} != 'ip-00-000-0-000' ]; then echo "[ERROR] THIS SCRIPT C'ANT BE USED IN THIS HOST" echo "${DATE} - [ERROR] This is not correct script.Please confirm relation between OEM and script." > /home/ec2-user/script_error.log exit 1 fi ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ EOF
↑
二重起動防止の条件分岐と起動チェック防止条件、ヒアドキュメントによるec2-userでの実行指示
全体としてこのような感じです。
ここまで検証してみて、もうこれ以上は私の実力では手詰まりです。
もし解決方法や、原因かも知れない部分があればご教示願います。
どうぞ宜しくお願い致します。
