前提・実現したいこと
centos 6で動いていた配信メルマガの短縮urlのリダイレクト処理、およびクリック・開封率を解析するバッチ処理を行う機能を
サーバー移行にして動作検証をしております。
下記の流れで、処理を行うのですが、①②ともに動いていない状況です。同ディレクトリ内にあるリダイレクト処理 (PHP)は動いております。
PrivateTmpはfalse、SElinuxはDisabledです。また、httpd、crondの再起動も行っています。
パーミッションはもともとの本番サーバーと同様にしてあるので、問題ないかと思います。
/home/xxx/web/log/error.logには特にエラーは出ていないです。
他に考えられる原因はありますでしょうか。
①/home/xxx/web/log/access.log-日付 ファイルにログを記載
②/tmp/click_log_日付.csv ファイルにログをCSV化
③csvからデータをmysqlのDBに保存
該当のソースコード
#crontab #クリックカウント解析(5時) 32 01 * * * /bin/bash /home/xxx/web/analysis/scripts/parse_click_log.sh staging >> /home/xxx/web/log/click/batch.log 2>&1
#parse_click_log.sh #DB_CONN="$DB_BIN -S $DB_SOCK -u$DB_USER -p$DB_PASSWORD" DB_CONN="$DB_BIN -h$DB_HOST -P$DB_PORT -u$DB_USER -p$DB_PASSWORD" AGODAY="$(date +"%Y%m%d" --date="1 days ago")" FILEDAY="$(date +"%Y%m%d")" TODAY="$(date +"%Y-%m-%d")" APACHE_LOG=${APACHE_LOG_PATH}/access.log-${FILEDAY} TMP_LOG_FILE=/tmp/click_log_${FILEDAY}.csv rm -f $TMP_LOG_FILE touch $TMP_LOG_FILE ### read apache log echo "`date` read apache log" while read line; do delivery_mail_id=`echo $line | grep 'GET /c/' | awk -F'"' '{print $4}' | tr '/' ' ' | awk '{print $3"\t"$4"\t"}'` if [ -n "$delivery_mail_id" ] && [ "z$delivery_mail_id" != 0 ]; then log_at=`echo $line | awk -F'"' '{print $2"\t"}'` ua=`echo $line | awk -F'"' '{print $6"\t"}'` echo "${log_at}${ua}${delivery_mail_id}" >> $TMP_LOG_FILE fi done < $APACHE_LOG ### load apache log into click_log tbl sql_cmd="LOAD DATA LOCAL INFILE '${TMP_LOG_FILE}' INTO TABLE click_log FIELDS TERMINATED BY '\t' (@col1,@col2,@col3,@col4) set clicked_at=@col1,ua=@col2,delivery_mail_id=@col4,short_url=@col3,is_active=1,created_at=NOW();" #$DB_CONN -D $DB_NAME_LOG -e "${sql_cmd}" echo "`date` load apache log into click_log tbl" for((i=1;i<=5;i+=1)); do $DB_CONN -D $DB_NAME_LOG -e "${sql_cmd}" if [ "z$?" == "z0" ]; then break fi echo "`date` fail $i, sleep 10s and update again" sleep 10 done ### update mail_id, email, url, mail_type sql_cmd="UPDATE ${DB_NAME_LOG}.click_log, ${DB_NAME_MAIL}.delivery_mail, ${DB_NAME_MAIL}.mail_url, ${DB_NAME_MAIL}.url_master SET click_log.email = delivery_mail.email, click_log.mail_id = delivery_mail.mail_id ,click_log.mail_type=mail_url.mail_type,click_log.url=url_master.url WHERE click_log.delivery_mail_id = delivery_mail.delivery_mail_id AND mail_url.short_url=click_log.short_url AND url_master.url_id = mail_url.url_id AND click_log.created_at >= '${TODAY} 00:00:00';" #$DB_CONN -e "${sql_cmd}" echo "`date` update mail_id, email, url, mail_type" for((i=1;i<=5;i+=1)); do $DB_CONN -e "${sql_cmd}" if [ "z$?" == "z0" ]; then break fi echo "`date` fail $i, sleep 10s and update again" sleep 10 done #rm -f $TMP_LOG_FILE echo "`date` <<<<< END" ### END
#httpd.conf <VirtualHost *:80> ServerAdmin xxx@xxx DocumentRoot /home/xxx/web/analysis/src ServerName image.xxx.jp ErrorLog /home/xxx/web/log/error.log LogFormat "%h %l %u \"%{%Y-%m-%d %H:%M:%S}t\" \"%r\" %>s %b \"%{User-Agent}i\" \"%{Referer}i\"" parselog CustomLog /home/xxx/web/log/access.log parselog <Directory "/home/xxx/web/analysis/src"> Options FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>
試したこと
・llでcsvファイルを確認したところ、更新はされているようでした。
・access.log-xxxにデータを入れましたが、csvは更新されませんでした。
・②のうち、ファイルの作成は動いています。
・前のサーバーからcsvファイルを移行したところ、mysqlへの書き込み(③の動作)は確認しました。
補足情報(FW/ツールのバージョンなど)
cent os 8.2
apache 2.4.3
回答1件
あなたの回答
tips
プレビュー