前提条件如下:
安装了expect工具,配置脚本中的环境参数
logger.sh脚本内容如下:
#!/bin/bash
BEBUG_LOG="./debug-$(date +'%Y-%m-%d').log"
INFO_LOG="./info-$(date +'%Y-%m-%d').log"
WARN_LOG="./warn-$(date +'%Y-%m-%d').log"
ERROR_LOG="./error-$(date +'%Y-%m-%d').log"
CRITICAL_LOG="./critical-$(date +'%Y-%m-%d').log"
###########################
# level:
# header: format
# path :
##########################
debug() {
local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo "[DEBUG]-[$timestamp] $*" | tee -a "$DEBUG_LOG"
}
#########################
# level:
# header: format
# path :
##########################
info() {
local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo "[INFO]-[$timestamp] $*" | tee -a "$INFO_LOG"
}
##########################
# level:
# header: format
# path :
##########################
warn() {
local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo "[WARN]-[$timestamp] $*" | tee -a "$WARN_LOG"
}
##########################
# level:
# header: format
# path :
##########################
error() {
local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo "[ERROR]-[$timestamp] $*" | tee -a "$ERROR_LOG"
}
##########################
# level:
# header: format
# path :
##########################
critical() {
local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo "[CRITICAL]-[$timestamp] $*" | tee -a "$CRITICAL_LOG"
}
smdir.sh脚本内容如下:
#!/bin/bash
source ./logger.sh
#######
# 指定文件目录监控分发
# 1、分发目录配置、目的端信息配置
# 2、扫描指定目录是否触发推送
# 3、推送到指定地址 user@host:path
######
SRCDIR="./"
LASTMODIFY=$(date +"%s")
HOSTCONFS=("root@localhost:/tmp/")
PASSWORD="123456"
#触发
trigger(){
for host in ${HOSTCONFS[@]}
do
expect <<- CMD
set timeout 5
spawn scp -r $SRCDIR $host
expect "Password:"
send "$PASSWORD\r"
send "\r"
expect eof
CMD
done
}
# 扫描
scan(){
MODIFYTIME=$(stat -c %Y $SRCDIR)
info "lastmodify:$LASTMODIFY" "modifytime:$MODIFYTIME"
if [ $MODIFYTIME != $LASTMODIFY ]
then
LASTMODIFY=$MODIFYTIME
trigger
info "指定文件目录有更新触发推送"
fi
}
while true
do
scan
sleep 1
done
执行参考:
调测:sh smdir.sh
部署:nohup sh smdir.sh >/dev/null 2>&1 &
当前只是做了一个简单的实现,后期还需要对日志进行归档删除