本人之前在linux上寫的一段PHP代碼(邏輯是用PHP實(shí)現(xiàn)對數(shù)據(jù)庫中日志文件的轉(zhuǎn)移,運(yùn)行是shell腳本運(yùn)行),為什么掛掉后(不能正常轉(zhuǎn)移數(shù)據(jù)庫中的數(shù)據(jù)),進(jìn)程卻還在,根本就看不出來他掛掉。具體的PHP代碼如下:
/**
* 測試
*/
class PaizuTableHandler extends ScriptBase
{
public static $mysql = null;
const LOG_PAIZU_TABLE = 'log_user_paiju';
public function logic()
{
if(empty(self::$mysql)){
self::$mysql = $this->mysql('logs');
}
set_time_limit(0);
while (true)
{
$date = date("Y-m-d");
$dataTime = strtotime($date);
$timestampStart = $dataTime - 3600*24; //昨天
$timestampEnd = mktime(0,0,0,date("m"),1,date("Y"));//本月月初 例如:2017-07-01 00:00:00
$timestampEnd_lastmoth = mktime(0, 0 , 0,date("m")-1,1,date("Y"));//上月月初 例如:2017-06-01 00:00:00
if($timestampStart < $timestampEnd){
sleep(60);
continue;
}
$table = self::LOG_PAIZU_TABLE.'_'.date("Ym");//本月的表
$lastMothTable = self::LOG_PAIZU_TABLE.'_'.date("Ym",mktime(0, 0 , 0,date("m")-1,1,date("Y")));//上個(gè)月的表
$hasTable = self::$mysql->tableExists($table); //判斷是否有本月的表
$hasTableLast = self::$mysql->tableExists($lastMothTable); //判斷是否有上個(gè)月的表
$createFlag = $hasTable ? true : false; //本月的表是否存在
$createFlagLast = $hasTableLast ? true : false; //上個(gè)月的表是否存在
if( empty( $createFlag ) ){
//創(chuàng)建表
$createSql = "CREATE TABLE {$table} LIKE log_user_paiju";
$createFlag = self::$mysql->query($createSql);
}
if( $createFlag ){
//查詢本月當(dāng)天應(yīng)清空數(shù)據(jù)有沒有清空
$sql = "select * from log_user_paiju where UNIX_TIMESTAMP(`time`) between {$timestampEnd} and {$timestampStart} order by `time` desc limit 100";
$result = self::$mysql->query($sql);
$rs = self::$mysql -> fetch_row($result);
if( !$result ){
break;
exit(0);
}
$date = date("Y-m-d");
$current_time = strtotime($date); //當(dāng)前時(shí)間戳
$current_time2 = mktime(0,0,0,date("m"),6,date("Y")); //月初第6天
$last_rs = array(); //添加于2017.10.25
if($current_time == $current_time2 && !empty( $createFlagLast ) && empty($rs)){
//本月第6天把 上個(gè)月的數(shù)據(jù)全部放到上個(gè)月的表中(要放最少2天前)
$last_sql = "select * from log_user_paiju where UNIX_TIMESTAMP(`time`) between {$timestampEnd_lastmoth} and {$timestampEnd} order by `time` desc limit 100";
$last_sql1 = "INSERT INTO {$lastMothTable}(uid,paiju_score,paizu_score,`time`,paizu_id,seq,room_id,server_id,creator,`status`,mahjongType) SELECT uid,paiju_score,paizu_score,`time`,paizu_id,seq,room_id,server_id,creator,`status`,mahjongType FROM log_user_paiju where UNIX_TIMESTAMP(`time`) between {$timestampEnd_lastmoth} and {$timestampEnd} order by `time` desc limit 100";
$last_sql2 = "delete from log_user_paiju where UNIX_TIMESTAMP(`time`) between {$timestampEnd_lastmoth} and {$timestampEnd} order by `time` desc limit 100";
$result1 = self::$mysql->query($last_sql);
$last_rs = self::$mysql -> fetch_row($result1);
if($last_rs){
if($r = self::$mysql->query($last_sql1)){
self::$mysql->query($last_sql2);
}
}
}
$sql1 = "INSERT INTO {$table}(uid,paiju_score,paizu_score,`time`,paizu_id,seq,room_id,server_id,creator,`status`,mahjongType) SELECT uid,paiju_score,paizu_score,`time`,paizu_id,seq,room_id,server_id,creator,`status`,mahjongType FROM log_user_paiju where UNIX_TIMESTAMP(`time`) between {$timestampEnd} and {$timestampStart} order by `time` desc limit 100";
$sql2 = "delete from log_user_paiju where UNIX_TIMESTAMP(`time`) between {$timestampEnd} and {$timestampStart} order by `time` desc limit 100";
if(empty($rs) && empty($last_rs)){
sleep(60);
}
if($rs){
if($r1=self::$mysql->query($sql1)){
!self::$mysql->query($sql2);
}
}
}
usleep(3000);
}
}
}
====================================分割線================================
shell腳本如下:
#!/bin/sh
# scripts daemon, add to /etc/crontab
# */1 * * * * root PATH/script.sh --daemon
# run on root
if [ "$(uname -s|grep -F 'CYGWIN')" = "" ] && [ $UID -ne 0 ]; then
echo "superuser privileges are required to run this script."
exit 1
fi
# settings
PHP_CLI="/usr/bin/php -c /etc/php.ini"
SCRIPTS="PaizuTableHandler"
# paths
BASE_PATH=$(cd $(dirname $0) && pwd)
BASE_SCRIPT="$BASE_PATH/script.php"
LOGS_PATH="$BASE_PATH/data/logs/bash.log"
USAGE="Usage: $(basename $0) [-d|-a|-k SCRIPT]\n\
-d, --daemon\t\tthe daemon mode, runing checking\n\
-a, --killall\t\tkill the all scripts\n\
-k, --kill SCRIPT\tkill the SCRIPT\n\
-h, --help\t\tthis help text"
function get_pid()
{
echo $(ps -ef|grep -F "$1"|grep -v "grep"|awk '{print $2}')
}
function kill_script()
{
PID=$(get_pid "$1")
if [ "$PID" = "" ]; then
echo "$1 not found"
else
kill -9 $PID
echo "$1 has been killed, pid: $PID"
fi
}
case $1 in
-k|--kill)
if [ "$2" = "" ]; then
echo -e $USAGE
exit 0
fi
kill_script "$BASE_SCRIPT request/$2"
;;
-a|--killall)
for SCRIPT in $SCRIPTS; do
kill_script "$BASE_SCRIPT request/$SCRIPT"
done
;;
-d|--daemon)
for SCRIPT in $SCRIPTS; do
SCRIPT="$BASE_SCRIPT request/$SCRIPT"
PID=$(get_pid "$SCRIPT")
if [ "$PID" = "" ]; then
eval "$PHP_CLI $SCRIPT >/dev/null 2>&1 &"
PID=$(get_pid "$SCRIPT")
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] $SCRIPT has been down, restarted: $PID" >> $LOGS_PATH
fi
done
;;
*)
echo -e $USAGE
;;
esac
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。