Strict Standards: Declaration of action_plugin_blog::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/lib/plugins/blog/action.php on line 13

Strict Standards: Declaration of action_plugin_indexmenu::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/lib/plugins/indexmenu/action.php on line 13

Strict Standards: Declaration of action_plugin_importoldchangelog::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/lib/plugins/importoldchangelog/action.php on line 8

Strict Standards: Declaration of action_plugin_importoldindex::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/lib/plugins/importoldindex/action.php on line 8

Strict Standards: Declaration of action_plugin_include::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/lib/plugins/include/action.php on line 19

Deprecated: Assigning the return value of new by reference is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parserutils.php on line 208

Deprecated: Assigning the return value of new by reference is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parserutils.php on line 211

Deprecated: Assigning the return value of new by reference is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parserutils.php on line 421

Deprecated: Assigning the return value of new by reference is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parserutils.php on line 594

Strict Standards: Declaration of cache_instructions::retrieveCache() should be compatible with cache::retrieveCache($clean = true) in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/cache.php on line 291

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/auth.php on line 154

Strict Standards: Only variables should be passed by reference in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/doku.php on line 73
サーバー専用シェルスクリプト [開発チーム]

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

Deprecated: Function split() is deprecated in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/inc/parser/lexer.php on line 517

http://codezine.jp/article/detail/3643
シェルのオプションなど
シェルのオプションなど②

▼初期設定用

◆起動確認済み
IPなどのコアな設定は手作業で行うようにします

#!/bin/sh
 
# Write File => /etc/apt/sources.list
echo deb http://www.backports.org/debian etch-backports main >> /etc/apt/sources.list
 
# アプリケーションInstall
apt-get install ssh telnetd vim rsync sudo ntp ntpdate psmisc <<EOF
Y
y
EOF
 
# Editor Select => Change the VIM
update-alternatives --config editor <<EOF
3
EOF
 
#====================================================
 
# NTP関連ファイルの編集
cp /etc/ntp.conf /etc/ntp.conf.back
sed 's/server\ */#server\ /g' /etc/ntp.conf.back > /etc/ntp.conf
 
cp /etc/ntp.conf /etc/ntp.conf.back
sed -e '23s/.*/\nserver\ -4\ ntp.nict.jp\nserver\ -4\ ntp.jst.mfeed.ad.jp\n/g' /etc/ntp.conf.back > /etc/ntp.conf
 
#====================================================
 
cp /etc/default/ntpdate /etc/default/ntpdate.back
sed 's/NTPSERVERS=*/#NTPSERVERS=/g' /etc/default/ntpdate.back > /etc/default/ntpdate
 
cp /etc/default/ntpdate /etc/default/ntpdate.back
sed -e '11s/.*/\nNTPSERVERS="ntp.nict.jp\n/g' /etc/default/ntpdate.back > /etc/default/ntpdate
 
#====================================================
 
/etc/init.d/ntp start
ntpq -p
ntpdate ntp.nict.jp
 
apt-get update
apt-get upgrade <<EOF
Y
 
EOF
 
apt-get install gcc g++ make <<EOF
Y
EOF

postfixをいれる

apt-get update
dpkg --configure -a

apt-get install postfix
Y
[tab]
Enter
fideli.info

▼webサーバー用

  • apache
  • PHP5関連
  • apc関連(php5-dev・apache2-dev)
  • Perl関連(pear channel-update pecl.php.net・pecl install apc)
  • 一通り終わったら「/etc/init.d/apache2 restart
  • /var/www/apache2-default/info.phpを作成
  • http://サーバーのIP/apache2-default/info.phpにアクセスするようにコメント表示

完成版

#!/bin/sh
 
 
# ===============================
# 初期設定
HOST=`hostname`
IP=`ifconfig |grep "inet addr"`
FILE1='/etc/hosts'
FILE2='info.php'
COM1=`cp $FILE1 $FILE1.back`
COM2=`cat $FILE2 | grep "<html>"`
CUT=`echo $IP | cut -d " " -f 2` ※日本語表示の場合は「1CUT2=`echo $CUT | cut -d ":" -f 2`
CUT3=`echo "\"http://"$CUT2"/info.php\" にアクセスしてください" | sed -e "s/ //"` ※日本語表示の場合
FIVE='5'
 
# ===============================
# Install the apache php5 apc
apt-get install apache2-mpm-prefork php5 libapache2-mod-php5 php5-gd php-pear php5-curl php5-xmlrpc  php5-imagick php5-mcrypt php5-pgsql php5-memcache php5-mapscript php-apc php5-dev apache2-threaded-dev << EOF
Y
y
EOF
 
pear channel-update pecl.php.net
pecl install apc << EOF
yes
EOF
 
# ===============================
# hostsファイルの編集
echo $COM1
echo '127.0.0.1       localhost' > $FILE1
echo '127.0.1.1       '$HOST'.fideli.com '$HOST >> $FILE1
echo '' >> $FILE1
 
# ===============================
# apache2の再起動
/etc/init.d/apache2 restart
 
# ===============================
# phpファイルの作成
touch /var/www/info.php
echo \<?php > /var/www/info.php
echo phpinfo\(\)\; >> /var/www/info.php
 
 
echo "\"http://"$CUT2"/info.php\" にアクセスしてください"
echo $CUT3  ※日本語表示の場合
 
 
sleep $FIVE
 
 
 
echo "Postfixをインストールします"
 
apt-get update
dpkg --configure -a
apt-get install postfix << EOF
Y
EOF

負荷分散編

pound使用時のwebサーバー側にて行ってください

cd /usr/local/src/
wget http://www.cotds.org/mod_extract_forwarded2/mod_extract_forwarded2-0.1.tar.gz
tar zxf mod_extract_forwarded2-0.1.tar.gz
cd mod_extract_forwarded2-0.1
apxs2 -c -i -a mod_extract_forwarded2.c


touch /etc/apache2/mods-available/extract_forwarded.load

echo LoadModule extract_forwarded_module /usr/lib/apache2/modules/mod_extract_forwarded2.so >> /etc/apache2/mods-available/extract_forwarded.load

touch /etc/apache2/mods-available/extract_forwarded.conf

echo AddAcceptForwarder pound >> /etc/apache2/mods-available/extract_forwarded.conf


a2enmod extract_forwarded
a2enmod rewrite  

/etc/init.d/apache2 restart

アクセス用コメント【部品】

#!/bin/sh
 
# 正規表現で抜き出し
IP=`ifconfig |grep "inet addr"`
 
# 抜き出した結果を「cut」でl切り出し
CUT=`echo $IP | cut -d " " -f 2`
CUT2=`echo $CUT | cut -d ":" -f 2`
echo -e "\a"
echo "\"http://"$CUT2"/apache2-default/info.php\" にアクセスしてください"

ファイルに書き込み用【部品】

#!/bin/sh
cd /var/www/apache2-default/
 
touch info.php
 
echo \<?php >> kuma
echo phpinfo\(\)\; >> kuma

hostsの書き直し【部品】

#!/bin/sh
 
 
FILE='/etc/hosts'
HOST=`hostname`
COM=`cp $FILE $FILE.back`
 
echo '127.0.0.1       localhost' > $FILE
echo '127.0.1.1       '$HOST'.fideli.com '$HOST >> $FILE
echo '' >> $FILE

▼dbサーバー用

posstgresの場合

apt-get -t etch-backports install postgresql-common <<EOF
y
yes
EOF

apt-get install postgresql-8.3



▼apacheのログ処理

ログの書き出し規則「/etc/apache2/sites-enabled/設定ファイル

ErrorLog "|\"/usr/sbin/rotatelogs\" \"/var/log/apache2/error.%Y-%m-%d.log\" 86400 540"
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Host}i\"" combined
CustomLog "|\"/usr/sbin/rotatelogs\" \"/var/log/apache2/access.%Y-%m-%d.log\" 86400 540" combined

ログ自動圧縮(メール報告なし)

#!/bin/sh
 
#
DAY=`date '+%Y-%m-%d' -d '1 days ago'`
 
DIR='/var/log/apache2'
 
COM=`echo $DIR/*.$DAY.log`
 
echo $DAY
 
for FILE in $COM
do
	if [ -e "$FILE" ];
	then
		echo $FILE
		gzip $FILE
	COM2=`echo $FILE.gz`
	for FILEZ in $COM2
	do
		if [ -e "$FILEZ" ];
		then
			echo 'OK gzip'
			echo $FILEZ
		else
			echo 'Failed gzip'
 
		fi
	done
	else
		echo $FILE
		echo 'BAD'
	fi
done

ログ自動圧縮(メール報告あり)

#!/bin/sh
 
# Setting for LogFiles
DAY=`date '+%Y-%m-%d' -d '1 days ago'`
DIR='/var/log/apache2'
COM=`echo $DIR/*.$DAY`
 
# Setting for SendMail
HOST=`hostname`
ADD="y_sato@e-classis.co.jp"
MESSAGE=`echo "結果報告" | nkf -s`
SUB=`echo $DAY "hostname:" $HOST | nkf -j`
 
# Function for SendMail
func_mail(){
# SendMail===================
/usr/sbin/sendmail -t <<EOF
From: $ADD
Subject: $SUB
To: $ADD
========
$MESSAGE
========
 
$MEM
 
$DATA
EOF
}
 
 
DATA=''
 
# LogFiles Compression==========
for FILE in $COM
do
        if [ -e "$FILE" ];
        then
                gzip $FILE
                COM2=`mv $FILE.gz $FILE.$HOST.log.gz `
                COM3=`echo $FILE.$HOST.log.gz`
                FILENAME=$FILE.$HOST.log.gz
                for FILES in $COM3
                do
                        if [ -e "$FILENAME" ];
                        then
                                MEM1=`echo "ファイル圧縮完了" | nkf -s`
                                MEM2=`echo "以下の処理が実行されました"  | nkf -s`
                                MEM=`echo $MEM1 & echo $MEM2`
 
                                #DATA=`echo -e "$DATA\n.$FILENAME"`
                                DATA=`echo $DATA & echo $FILENAME`
                                DATA=$DATA
                        else
                                MEM="Don't save the FILE"
                                DATA=`echo -e "$DATA\n.$FILENAME"`
                        fi
                done
        else
                MEM1='No Files'
                MEM2=`echo "先日の分のログファイルはありませんでした" | nkf -s`
                MEM=`echo $MEM1 & echo $MEM2`
        fi
done
 
func_mail

メール送信のみ

メール送信が出来るだけ

#!/bin/sh
 
# Setting
DAY=`date '+%Y-%m-%d' -d '1 days ago'`
HOST=`hostname`
ADD="y_sato@e-classis.co.jp"
MEM=`echo "MESSAGE" | nkf -s`
SUB=`echo $DAY "hostname:" $HOST | nkf -j`
 
echo $DAY
 
# SendMail
/usr/sbin/sendmail -t <<EOF
From: $ADD
Subject: $SUB
To: $ADD
$MEM
EOF

functionを使用し、すぐにプログラムに使用できます

# Setting for SendMail
HOST=`hostname`
DAY=`date '+%Y-%m-%d %H:%M'`
ADD="y_sato@e-classis.co.jp"
MESSAGE=`echo "結果報告" | nkf -s`
SUB=`echo $DAY "hostname:" $HOST | nkf -j`
 
# Function for SendMail
func_mail(){
# SendMail===================
/usr/sbin/sendmail -t <<EOF
From: $ADD
Subject: $SUB
To: $ADD
========
$MESSAGE
========
 
$MEM
 
$DATA
EOF
}

▼ディレクトリのコピー関連

ディレクトリのコピー

ディレクトリ等のコピー開始時と終了時、ファイルに日付と時間を書き出す
本番機での使用の為、何らかの引き数(何でもOK)を与えて走らせないとbadになります

# ./copy.sh kuma
#!/bin/sh
 
DAY=`date '+%c'`
FILE='/fideli1_data/start.log'
 
 
# $1が引数として認識されている
if [ $1 ]
then
 
touch $FILE
 
#===================================
echo "/var START" >> $FILE
echo $DAY >> $FILE
 
scp -r fideli@fideli1:/home/fideli /fideli1_data/
 
 
DAY2=`date '+%c'`
echo $DAY2 >> $FILE
 
#===================================
 
else
 
echo 'bad'
 
 
fi

ディレクトリの圧縮後、rsyncでコピー

ディレクトリを圧縮し、rsyncで別サーバーに移行するためのプログラムです。
圧縮をかける際、以前のファイルは消去してしまいます。

# vi backup_sysad.sh
#!/bin/sh
 
# ユーザーの指定
HOST='joker'
 
# ディレクトリの指定
DIR='/home/sysad'
DIR2='sysad_smb'
 
# データを受信先のディレクトリ指定
H_DIR='/home/joker/sysad_backup'
 
 
# 日付の指定
DAY_YMD=`date '+%Y-%m-%d'`
DAY_YMD="$DAY_YMD"
 
# ファイル名の指定
FILE=`echo "sysad_smb_"$DAY_YMD".tar.gz"`
FILE2=`echo "sysad_smb_"$DAY_YM"*.tar.gz"`
 
 
# ================================================
 
 
# ディレクトリ移動
cd $DIR
 
# 以前のファイルの存在確認
if [ -e $FILE2 ]
then
        rm -f $FILE2
        if [ ! -e $FILE2 ];
        then
                echo " "
        fi
 
fi
 
# sysadディレクトリの圧縮
COM=`sudo tar -cvzf $FILE $DIR2`
RES=`echo $?`
 
if [ "$RES" = 1 ];
then
        echo "else"
else
        # 圧縮が完了したら、rsyncでjoker(192.168.0.150)に移行します
        rsync -av $FILE $HOST@$HOST:$H_DIR
fi

別サーバーからrsyncで持ってきたファイルを2日分だけ残しておくためのプログラムです。
日付の部分を変更すれば、その分だけ残しておくことが出来ます。

# vi check_sysad_smb.sh
#!/bin/sh
 
# 保存先ディレクトリ
DIR='/home/joker/sysad_backup'
 
# 日付
DAY_YMD=`date '+%Y-%m-%d' -d '2 days ago'`
 
# ファイル名の指定
FILE=`echo "sysad_smb_"$DAY_YMD".tar.gz"`
 
 
cd $DIR
 
for FILE in $FILE
do
        if [ -e "$FILE" ];
        then
                rm -f $FILE
                if [ ! -e $FILE ];
                then
                        echo " "
                fi
        fi
done

▼サーバーのロードアベレージなど監視

fideli1を別サーバ【お助け君192.168.10.91】で監視し、ロードアベレージが閾値を越えた際に、負荷分散開始

get_load.sh

#!/bin/sh
 
# ファイルの保存先
DIR1='/root/sh/data/'
 
# ファイルの取得先
IP1='192.168.10.11'
 
# 日付
DAY_YM=`date '+%Y-%m'`
DAY_YM="$DAY_YM"
 
DAY=`date`
DAYS="$DAY"
 
# ファイル名
FILE1='load.php'
FILE3='load.php*'
 
FILE2=`echo "take_log_time_"$DAY_YM".log"`
FILE2="$FILE2"
 
echo $FILE2
 
NUM1='10'
 
S_NUM='2'
 
SP='a'
 
 
#======================
 
 
 
# 以前取得したファイルが存在するか
if [ -d "$DIR1" ];
then
        # ディレクトリの移動
        cd $DIR1
 
        # 以前取得したファイルの削除
        if [ -e "$FILE1" ];
        then
#            echo $FILE1
            rm -f $FILE3
        fi
 
        COM=`wget http://$IP1/himitu/$FILE1`
        WGET=`echo $?`
 
        # ファイルの取得が出来ないので、apache2起動
        if [ "$WGET" = 1 ];
        then
                echo $DAYS "write logfile APACHE2 START"  >> $FILE2
                echo "  Unable to get the file!!!" >> $FILE2
                /etc/init.d/apache2 stop
                /etc/init.d/apache2 stop
                sleep 2
                /etc/init.d/apache2 start
        # ファイルの取得
        else
                # ファイルからロードアベレージの取得
                COM1=`cat $DIR1$FILE1 |cut -d "," -f 4`
 
                COM1=`echo $COM1 |cut -d " " -f 3`
 
                COM2=`echo $COM1 |cut -d "." -f 1`
 
                COM3=`echo $COM2`
                NUM2="$COM3"
 
                echo $NUM1
                echo $NUM2
 
                # ロードアベレージ値の判定
                # 設定の値よりもロードアベレージが上昇
                # A<B
                if [ $NUM1 -le $NUM2  ];
                then
                        COM4=`ps ax |grep /usr/sbin/apache|wc -l`
                        NUM3="$COM4"
 
                        # プロセスの数を判定し、apache2が起動していなければ起動
                        if [ 1 -lt $NUM3 ];
                        then
                                 # ※実行エラーを防ぐためなので、下記は意味なし
                                 A=$SP
                        else
                                /etc/init.d/apache2 stop
                                /etc/init.d/apache2 stop
                                sleep 2
                                /etc/init.d/apache2 start
                                echo $DAYS "write logfile APACHE2 START" >> $FILE2
                        fi
                # 設定の値よりもロードアベレージが下降
                # A>B
                else
                        COM5=`ps ax |grep /usr/sbin/apache|wc -l`
                        NUM4="$COM5"
 
                        # プロセスの数を判定し、apache2が起動してれば停止
                        if [ $NUM4 -gt 1 ];
                        then
                                /etc/init.d/apache2 stop
                                /etc/init.d/apache2 stop
                                echo $DAYS "write logfile APACHE2 END" >> $FILE2
                        fi
                fi
        fi
fi

cronに1分ごとに書き込んでいけば、ファイルに1分ごとに書き込まれていくので、ディスク交換時等、使用するときだけ動かしながら「tail」コマンドで見張れるので便利です

check_df.sh

#!/bin/sh
 
# 任意のディレクトリを指定
DIR="/data/load"
 
#COM=`date && df -h`
 
# 日付の指定(年月日)
DAY_YMD=`date '+%Y-%m-%d'`
DAY_YMD="$DAY_YMD"
 
# ファイル名の指定
FILE=`echo "df_data_"$DAY_YMD".log"`
FILE="$FILE"
 
# ディレクトリの移動
cd $DIR
 
# 各コマンド結果をファイルに書き込む
date >> $FILE
uptime >> $FILE
df -h >> $FILE

check_load.sh

#!/bin/sh
 
# 任意のディレクトリを指定
DIR="/data/load"
 
# コマンドの指定
COM=`uptime`
 
# 日付の指定
DAY_YMD=`date '+%Y-%m-%d'`
DAY_YMD="$DAY_YMD"
 
# ファイル名の指定
FILE=`echo "load_time_"$DAY_YMD".log"`
FILE="$FILE"
 
# ディレクトリの移動
cd $DIR
 
# コマンド結果を書き込んでいく
echo $COM >> $FILE

▼fideli1のapacheの起動確認

#!/bin/sh
 
# 保存先ディレクトリ
DIR="/home/kuma/sh_dir/date"
 
# 取得URL
F_URL="http://fideli.com/"
 
# ファイル名
FILE="index.html"
FILE2="index.html*"
 
# コマンド
COM=`echo $FILE |grep "html"`
 
# 値
NUM='10'
 
# メールへ挿入する本文
MEM1=`echo "fideliに異変が起きている可能性があります" | nkf -s `
MEM2=`echo "直ちに確認をしてください" | nkf -s `
MEM=`echo $MEM1 & echo $MEM2`
 
# メール設定 for SendMail
IP=`ifconfig |grep "inetアドレス"`
IP_CUT=`echo $IP | cut -d " " -f 1`
HOST_IP=`echo $IP_CUT | cut -d ":" -f 2`
HOST=`hostname`
ADD="sysad@e-classis.co.jp"
MESSAGE=`echo "" | nkf -s`
SUB=`echo $DAYS "fideli1 HTTP error" | nkf -j`
 
# Function for SendMail
func_mail(){
# SendMail===================
/usr/sbin/sendmail -t <<EOF
From: $ADD
Subject: $SUB
To: $ADD
=======================================
Mail From : $HOST_IP [ $HOST ]
=======================================
 
$MEM
 
EOF
}
 
 
# *************************************************
# *************************************************
 
 
# ディレクトリの移動
cd $DIR
 
# ファイルの削除
rm -f $FILE2
 
# ファイル取得時の時間の取得
DAY=`date '+%H%M%S'`
DAY=`echo $DAY`
DATE1=`echo $DAY`
 
# ファイルの取得`
wget $F_URL
RES=`echo $?`
 
DAY2=`date '+%H%M%S'`
DAY2=`echo $DAY2`
DATE2=`echo $DAY2`
 
# 取得時と取得後の時間差
TIME_NUM=`expr $DATE2 - $DATE1`
 
# 10秒以上かかるかどうか判定
if [ $NUM -le $TIME_NUM ];
then
        # 10秒以上かかる
        func_mail
else
        # 10秒以上かからない
        if [ $RES = 0 ];
        then
                COM=`cat $FILE |grep "html"`
                RES2=`echo $?`
                if [ $RES2 = 1 ];
                then
                        echo "no html"
                        func_mail
                else
                        echo "COMPLETE html"
                fi
        fi
fi

▼VMwareServer2.0用

バックアップ用シェルスクリプト

#!/bin/sh
LIST=`vmware-vim-cmd vmsvc/getallvms|egrep "^[0-9]" | awk '{print $1}'`
VMWARE="/vmware/"
BACKUP="sysad@enoki:/hd4/share/vmware_backup/joker/"
NUM=0
for NUMBER in $LIST
do
	STATUS=`vmware-vim-cmd vmsvc/power.getstate $NUMBER | sed -n '2p' | awk '{print $2}'`
	if [ $STATUS = "on" ]; then
		RESTART[$NUM]=$NUMBER
		NUM=`expr $NUM + 1`
		STOP=`vmware-vim-cmd vmsvc/power.off $NUMBER`
	fi
done
RS=`rsync -a --delete $VMWARE $BACKUP`
for (( i = 0; i < $NUM; i++ )){
	START=`vmware-vim-cmd vmsvc/power.on ${RESTART[i]}`
}

▼AmazonEC2サーバー用

●save_server_data.sh
【各サーバーのイメージ保存用】

#!/bin/sh
 
export AWS_ACCESS_KEY_ID='AKIAIUKYZWM6FETUS4SQ'
export AWS_SECRET_ACCESS_KEY='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'
 
echo "----- 只今実行中です -----"
ruby /usr/local/s3sync/s3sync.rb -r /mnt/save_server/ backup-servers:pound/
 
# 全部上書き用(up先にないものは削除バージョン)
#ruby /usr/local/s3sync/s3sync.rb -r --delete /mnt/ backup-servers:baseserver/
 
echo "----- 作業完了 -----"

●rsync_web1_web2.sh
【同期元のWEBサーバーにrsync】

#!/bin/sh
 
USER='prende'
 
HOST='prende_web1'
HOST2='prende_web2'
 
FILE='/var/www/prende'
FILE2='/var/www'
 
 
 
echo -n 'WEB1サーバーにrsyncを実行しますか?//'
read YN
if [ "$YN" = 'Y' ]||[ "$YN" = 'y' ]||[ "$YN" = 'yes' ];
then
        rsync -av --delete $FILE $USER@$HOST:$FILE2
else [ "$YN" = 'N' ]||[ "$YN" = 'n' ]||[ "$YN" = 'no' ];
        echo ".....実行しません"
fi
 
echo -n 'WEB2サーバーにrsyncを実行しますか?//'
read YN
if [ "$YN" = 'Y' ]||[ "$YN" = 'y' ]||[ "$YN" = 'yes' ];
then
        rsync -av --delete $FILE $USER@$HOST2:$FILE2
else [ "$YN" = 'N' ]||[ "$YN" = 'n' ]||[ "$YN" = 'no' ];
        echo ".....実行しません"
fi

▼fideli1サーバーのロードアベレージが上昇

アクセス過多により、fideliのTOPが見られないなどの現象が起きた際、(coyoteでの付加分散などの設定後)救出用サーバーにて実行すると、アクセスを分散するためにapache2が起動する

cronに書き込む際

/dev/null 2>&1」をつけると、ファイル実行時にコメントが非表示になる

*/1 * * * * /root/sh/get_load.sh > /dev/null 2>&1
ソース(新)
#!/bin/sh
 
DIR1='/root/sh/data/'
 
IP1='192.168.10.11'
 
FILE1='load.php'
 
FILE2='take_log_time.log'
 
NUM1='10'
 
S_NUM='2'
 
SP='a'
 
#DAY=`date '+%Y-%m-%d'`
DAY=`date`
DAYS="$DAY"
 
#======================
 
 
 
# 以前取得したファイルが存在するか
if [ -d "$DIR1" ];
then
        # ディレクトリの移動
        cd $DIR1
 
        # 以前取得したファイルの削除
        if [ -e "$FILE1" ];
        then
            echo $FILE1
            rm $FILE1
        fi
 
        COM=`wget http://$IP1/himitu/$FILE1`
        WGET=`echo $?`
 
        # ファイルの取得が出来ないので、apache2起動
        if [ "$WGET" = 1 ];
        then
                echo $DAYS "write logfile APACHE2 START" >> $FILE2
                echo "  Unable to get the file!!!" >> $FILE2
                /etc/init.d/apache2 stop
                /etc/init.d/apache2 stop
                sleep 2
                /etc/init.d/apache2 start
        # ファイルの取得
        else
                # ファイルからロードアベレージの取得
                COM1=`cat $DIR1$FILE1 |cut -d "," -f 4`
 
                COM1=`echo $COM1 |cut -d " " -f 3`
 
                COM2=`echo $COM1 |cut -d "." -f 1`
 
                COM3=`echo $COM2`
                NUM2="$COM3"
 
                # ロードアベレージ値の判定
                # 設定の値よりもロードアベレージが上昇
                # A<B
                if [ $NUM1 -le $NUM2  ];
                then
                        COM4=`ps ax |grep /usr/sbin/apache|wc -l`
                        NUM3="$COM4"
 
                        # プロセスの数を判定し、apache2が起動していなければ起動
                        if [ 1 -lt $NUM3 ];
                        then
                                 # ※実行エラーを防ぐためなので、下記は意味なし
                                 A=$SP
                        else
                                /etc/init.d/apache2 stop
                                /etc/init.d/apache2 stop
                                sleep 2
                                /etc/init.d/apache2 start
                                echo $DAYS "write logfile APACHE2 START" >> $FILE2
                        fi
                # 設定の値よりもロードアベレージが下降
                # A>B
                else
                        COM5=`ps ax |grep /usr/sbin/apache|wc -l`
                        NUM4="$COM5"
 
                        # プロセスの数を判定し、apache2が起動してれば停止
                        if [ $NUM4 -gt 1 ];
                        then
                                /etc/init.d/apache2 stop
                                /etc/init.d/apache2 stop
                                echo $DAYS "write logfile APACHE2 END" >> $FILE2
                        fi
                fi
        fi
fi
ソース(古)
#!/bin/sh
 
DIR1='/root/sh/data/'
 
IP1='192.168.10.11'
 
FILE1='load.php'
 
FILE2='take_log_time.log'
 
NUM1='10'
 
S_NUM='2'
 
SP='a'
 
#DAY=`date '+%Y-%m-%d'`
DAY=`date`
DAYS="$DAY"
 
#======================
 
cd $DIR1
 
 
 
if [ -e "$FILE1" ];
then
        echo $FILE1
        rm $FILE1
        COM=`wget http://$IP1/himitu/$FILE1`
        WGET=`echo $?`
 
        if [ "$WGET" = 1 ];
        then
                echo $DAYS "write logfile APACHE2 START" >> $FILE2
                echo " Unable to get the file!!!" >> $FILE2
                /etc/init.d/apache2 stop
                /etc/init.d/apache2 stop
                sleep 2
                /etc/init.d/apache2 start
        fi
fi
 
 
COM1=`cat $DIR1$FILE1 |cut -d "," -f 4`
 
COM1=`echo $COM1 |cut -d " " -f 3`
 
#echo $COM1
 
COM2=`echo $COM1 |cut -d "." -f 1`
 
COM3=`echo $COM2`
NUM2="$COM3"
#exit
 
echo $NUM1
echo $NUM2
 
 
# A<B
if [ $NUM1 -le $NUM2  ];
then
        echo "あがってる"
        COM4=`ps ax |grep /usr/sbin/apache|wc -l`
        NUM3="$COM4"
 
        if [ 1 -lt $NUM3 ];
        then
                 A=$SP
        else
                /etc/init.d/apache2 stop
                /etc/init.d/apache2 stop
                sleep 2
                /etc/init.d/apache2 start
                echo $DAYS "write logfile APACHE2 START" >> $FILE2
        fi
 
# A>B
else
        echo "ちいさい"
        COM5=`ps ax |grep /usr/sbin/apache|wc -l`
        NUM4="$COM5"
 
        if [ $NUM4 -gt 1 ];
        then
                /etc/init.d/apache2 stop
                /etc/init.d/apache2 stop
                echo $DAYS "write logfile APACHE2 END" >> $FILE2
        fi
fi

▼aliasesを件数指定で追記するためのもの

#!/bin/sh

# 日付の指定
DAY_YMD=`date '+%Y-%m-%d'`
DAY_YMD="$DAY_YMD"

# ファイルの指定
FILE1=`echo '/home/fideli/cron/'$DAY_YMD'_aliases.log'`
FILE2='/home/fideli/cron/new_aliases'

# 1件から100件を指定
for i in `seq 1 100`
do
        echo "test$i@fideli.info" >> $FILE1
        echo "test$i: /dev/null" >> $FILE2
done

▼参考例

Perlだけど、webページ確認の部分で参考になりました

#!/usr/bin/perl
 
$| = 1;
 
use LWP::Simple;
 
foreach ('www'){
        my $www = $_;
        my $html = '';
        $html = get("http://localhost/index.php");
        if($html !~ /<html/){#
                &sendmail("fideli apache Down try httpd restart!!");
                `/etc/init.d/httpd stop`;
                `/etc/init.d/httpd stop`;
                `/etc/init.d/httpd start`;
                $html = get("http://localhost/index.php");
                if($html !~ /<html/){#
                                `perl /home/fideli/crons/memry_crean.pl`;
                                &sendmail("fideli apache Down Don't restart!!");
                }else{
                                &sendmail("fideli apache restoration complete!!");
                }
        }
}
exit;

シェルスクリプトのYesNoの応答文章

#!/bin/sh
 
echo -n 'Yes? or No?(Y/n) > '
read YN
 
# Y or y
if [ "$YN" = 'Y' ]||[ "$YN" = 'y' ];
then
echo "great"
 
# N or n
elif [ "$YN" = 'N' ]||[ "$YN" = 'n' ];
then
echo "noooooo!"
 
# No String
else
echo "Script will exit soon..."
exit
 
fi
サーバー専用シェルスクリプト.txt · 最終更新: 2010/07/27 15:46 (外部編集)
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0

Strict Standards: Only variables should be passed by reference in /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/dokuwiki/doku.php on line 81