2013年2月20日 星期三

auto mount NAS direct on /home/

最近因為需要處理NAS 上的資料 , 每天早上開機都要 mount 一次 , 麻煩 , 寫一個 shell 來自動 mount 吧 !!

開機完畢後只要執行這個 shell 就會將需要的 mount 好. 預設值是 Public & Software 資料夾 , mount 位置在 /home/${USER}/NAS/ , 並且會自動建立對應位置 , 如果需要額外資料夾 , 可以 使用 nas_mount.sh abc 的方式.
這個 shell 會檢查 NAS 是否在線上 (ping IP) .
也會自動檢查是否已經 mount 好了.

內容如下:


#!/bin/sh
#
# vi:set ts=4:

## ===== defind echo color
COLOR_ECHO="echo -e"        ## in Fedora the color echo need have -e argument.
COLOR_NORMAL="\033[0m"
COLOR_BOLD="\033[1m"
COLOR_RED="\033[31m"
COLOR_GREEN="\033[32m"
COLOR_YELLOW="\033[33m"
COLOR_BLUE="\033[34m"

## =====================================
## NAS Mount function.
## =====================================
function NAS_mount()
{
nas_dir="$1"
mnt_dir="$2"

## ---- echo some message .
${COLOR_ECHO} "${COLOR_BOLD}""${COLOR_BLUE}" \
                "## Mount NAS \"${nas_dir}\" director on \"${mnt_dir}\" ........" \
                "${COLOR_NORMAL}"

## ---- check mnt_dir exist
if [ ! -e "${mnt_dir}" ];then
    mkdir -p ${mnt_dir}
fi

## ---- check already mounted
_mounted=`cat /proc/mounts | grep NAS/${nas_dir} | awk '{print $2}'`
_mount_src=`cat /proc/mounts | grep NAS/${nas_dir} | awk '{print $1}'`

if [ -n "${_mounted}" ];then
    ${COLOR_ECHO} "${COLOR_BOLD}""${COLOR_GREEN}" \
                "    # NAS \"${_mount_src}\" Already mount on \"${mnt_dir}\"  ......" \
                "${COLOR_NORMAL}"
else

    _nas_aliv=`ping ${NAS_IP} -c 1 | grep errors  | sed 's/.*errors/errors/g' | sed 's/errors.*/errors/g' `
    if [ -z "${_nas_aliv}" ];then
        echo xxxxxxx | su -c " mount.cifs //192.168.2.6/${nas_dir} ${mnt_dir} -o user=jeff -o pass=xxxxxxxxx" > /dev/null 2>&1

    else
        ${COLOR_ECHO} "${COLOR_BOLD}""${COLOR_RED}" \
                    "NAS Server not ready \"${NAS_IP}\" ........" \
                    "${COLOR_NORMAL}"
    fi
fi


}

## ===== Mount NAS on System.
NAS_IP="192.168.2.6"


if [ -z "$1" ];then
    NAS_mount "Software" "/home/${USER}/NAS/Software"
    NAS_mount "Public" "/home/${USER}/NAS/Public"
else
    NAS_mount "${1}" "/home/${USER}/NAS/${1}"
fi

## =================

2013年2月18日 星期一

用 shell + crontab 固定發出 openkm report Mail.

最近因為 上級要知道 OpenKM(簡稱 OKM) 內容的更動狀況 , 需要每週 report 一次 !!
主要是看看這星期 OKM 內容有哪些人更動!!

Google 一下 有關 OKM 的 auto report  , 發現需要會 java script , 我不會 @@ !!

想說 , OKM 的 dashboard 可以看到 log 內容 , 應該 找一下 log file , 也會有吧 !!
找了半天 , 發現 /openkm-6.2.2-community/tomcat/repository/okmdb.log 內有我要的訊息 , 好吧 , 山不轉 人轉  , 寫一個 shell script + crontab 來執行 auto report 吧 !!

首先寫一個 shell , 由 okmdb.log 內容取出 document create/delete & check in 的項目
到一個 temp file , shell 如下:


#!/bin/sh
#
# vi:set ts=4:

#############################
## ===== defind echo color
#############################
COLOR_ECHO="echo -e"        ## in Fedora the color echo need have -e argument.
COLOR_NORMAL="\033[0m"
COLOR_BOLD="\033[1m"
COLOR_RED="\033[31m"
COLOR_GREEN="\033[32m"
COLOR_YELLOW="\033[33m"
COLOR_BLUE="\033[34m"

#############################
## ==== check log file exist.
#############################
OKMDB_LOG="/home/jeff/openkm-6.2.2-community/tomcat/repository/okmdb.log"
TEMP_FILE="/home/jeff/okm_report.txt"

if [ ! -e ${OKMDB_LOG} ];then
    ${COLOR_ECHO} "${COLOR_BOLD}""${COLOR_RED}" \
        "The log file \"${OKMDB_LOG}\" not exist !! " \
        "${COLOR_NORMAL}"

    exit
fi

#############################
## ====  Crate title
#############################
echo -e "ITEM\t\t\tDATE\t\t\tFILES\t\t\tUSER" > ${TEMP_FILE}
echo >> ${TEMP_FILE}

#############################
## ==== get document create event log.
#############################
DOC_CREATE=`cat ${OKMDB_LOG} | grep "CREATE_DOCUMENT" | sed 's/\ /:/g'`

IFS="
"
for list in ${DOC_CREATE} ; do
    IFS=','
    _date=`echo ${list} | awk '{print $3}' | sed 's/\..*//g' | sed 's/'\''//g' `
    _file=`echo ${list} | awk '{print $7}' | sed 's/'\''//g' | sed 's/\/okm\:root\///g' `
    _user=`echo ${list} | awk '{print $8}' | sed 's/'\''//g' | sed 's/)//g'`
    echo -e "CREATE\t\t${_date}\t\t${_file}\t\t${_user}" >> ${TEMP_FILE}
done
echo >> ${TEMP_FILE}

#############################
## ==== get document delete event log.
#############################
DOC_DELETE=`cat ${OKMDB_LOG} | grep "DELETE_DOCUMENT" | sed 's/\ /:/g'`

IFS="
"
for list in ${DOC_DELETE} ; do
    IFS=','
    _date=`echo ${list} | awk '{print $3}' | sed 's/\..*//g' | sed 's/'\''//g' `
    _file=`echo ${list} | awk '{print $6}' | sed 's/'\''//g' | sed 's/\/okm\:root\///g' `
    _user=`echo ${list} | awk '{print $7}' | sed 's/'\''//g' | sed 's/)//g'`
    echo -e "DELETE\t\t${_date}\t\t${_file}\t\t${_user}" >> ${TEMP_FILE}
done
echo >> ${TEMP_FILE}

#############################
## ==== get document modify event log.
#############################
DOC_CHECKIN=`cat ${OKMDB_LOG} | grep "CHECKIN_DOCUMENT" | sed 's/\ /:/g'`

IFS="
"
for list in ${DOC_CHECKIN} ; do
    IFS=','
    _date=`echo ${list} | awk '{print $3}' | sed 's/\..*//g' | sed 's/'\''//g' `
    _file=`echo ${list} | awk '{print $7}' | sed 's/'\''//g' | sed 's/\/okm\:root\///g' `
    _user=`echo ${list} | awk '{print $8}' | sed 's/'\''//g' | sed 's/)//g'`
    echo -e "CHECKIN\t\t${_date}\t\t${_file}\t\t${_user}" >> ${TEMP_FILE}
done
echo >> ${TEMP_FILE}

##############################
## ==== send notify mail
#############################
NOTIFY_MAIL="jeff@xxxxxxx.com.tw,ch@xxxxxxx.com.tw,emiliehuang@xxxxxxx.com.tw,alvin@xxxxxxx.com.tw,pp@xxxxxxx.com.tw"
#NOTIFY_MAIL="jeff@xxxxxxx.com.tw"

mail -s "Content report" ${NOTIFY_MAIL} <  ${TEMP_FILE}
rm -rf  ${TEMP_FILE}

## ==== remove log file ??

if [ ! -z "$1" ] && [ "$1" == "-d" ];then
    echo > ${OKMDB_LOG}
fi

#############################
接著 , 我不想每天(星期)都去檢查 report file , 就將這個 file 內容直接mail 給上級吧^^ !!



要讓 fedora 發  mail 其實蠻簡單的 用 "mail -s "Content report" ${NOTIFY_MAIL} <  ${TEMP_FILE}"
就可以了!!

不過要先設定 smtp 的內容 , google 一下 其實也不難 , 只要建立 /home/jeff/.mailrc 檔案, 且.mailrc 內容填入下列即可:

set from=Server_AUTO<jeff@xxxxxx.com.tw> smtp=xxxx.com.tw
set smtp-auth-user=jeff@xxxx.com.tw smtp-auth-password=*******

set smtp-auth=login





上面有些個人訊息 , 就用 xxxx 和 **** 代替 !!

收到 mail 的內容就會如下:


ITEM            DATE            FILES            USER

 CREATE        2013-02-06:10:28:40        share/data_sip_image_ec510/sip/Image/English/Lower/btn_backspace_press.png        alvin
 CREATE        2013-02-06:10:29:18        share/data_sip_image_ec510/sip/Image/English/Upper/btn_backspace_press.png       alvin
..........