豁然高

导航

使用shell做过时处理以及发送邮件的事例

 

实现功能

1.过时处理

在shell脚本中调用执行php,如果php在300秒内不能结束,则结束执行

 

2。邮件发送

在报错等情况时发送邮件,并且邮件内容包含执行php时输出的错误日志内容

 

 

#!/bin/bash
TIMEOUT=300
FROM_ADDR="ph0-sys@group.co.jp"
TO_ADDRS=(
	"ph0-sys@group.co.jp"
)
CC_ADDRS=(

)
MAIL_CONTENT_FILE="/var/www/project/fuel/app/tasks/mailcontent.php"

function sync(){
	php_command="php /var/www/project/oil refine sync diff"
	res=$($php_command)
	if (( $?!=0 ))
	then
		sendmail ""
		return 0
	fi
	if [[ -n $res ]]
	then
		sendmail ""
		return 0
	fi
}

function sendmail(){
	if [ $BORG_FUEL_BATCH_ENV = development ]
	then
		subject='[borg ph0][DEV]同期ファイル作成失敗'
	elif [ $BORG_FUEL_BATCH_ENV = staging ]
	then
		subject='[borg ph0][STG]同期ファイル作成失敗'
	else 
		subject='[borg ph0][PRD]同期ファイル作成失敗'
	fi

	from=$FROM_ADDR
	to="${TO_ADDRS[@]}"
	cc=""
	for cc_mail in ${CC_ADDRS[@]}
	do
		cc="$cc -c $cc_mail "
	done
	
	log_file="/var/www/borg/fuel/app/tasks/logs/$(date "+%Y")/$(date "+%m")/$(date "+%d").log"
	title="同期ファイル作成処理はエラーになりました。"
	grep_msg="ERROR - $(date "+%Y-%m-%d %H:%M")"
	echo $title > $MAIL_CONTENT_FILE
	cat $log_file | grep "$grep_msg" >> $MAIL_CONTENT_FILE
	echo $1 >> $MAIL_CONTENT_FILE
	
	cat  "$MAIL_CONTENT_FILE" | mail -s "$subject" -r $from $cc $to
	if(( $?!=0 ))
	then
		echo "通知メールは送信失敗。"
	fi
}

function timeout_custom()
{
        waitfor=$TIMEOUT
        command=$*
        $command &
        commandpid=$!

        ( sleep $waitfor ;sendmail "同期ファイル作成処理は${waitfor}秒以上実行しました。" ; kill -9 $commandpid  >/dev/null 2>&1 )&
        sleeppid=$!
        wait $commandpid >/dev/null 2>&1
        kill $sleeppid >/dev/null 2>&1
}

timeout_custom sync

  

posted on 2019-08-28 13:51  豁然高  阅读(309)  评论(0编辑  收藏  举报