需求:
1、扫描WEB后台成生文件目录中含有可执行脚本路径内容的文件,执行后删除。
2、计划任务周期:每分钟。
#!/bin/bash # date: 20140213 # function: 扫描任意目录中的普通文件,执行该文件中的每一行php或其它脚本文件(保证每行一个绝对路径的文件)。 PATH=/bin:/sbin:/usr/bin:/usr/sbin IFS=‘ ‘ export PATH IFS # web后台生成文件的目录 listf_d="/data/web/adp.xywy.com/application/logs/handshell" # 执行成功或失败的日志文件。 log="/data/logs/cronlog/scanphp/shell-scanphp.log" # php执行失败时保存php的错误输出,用于错。 php_log="/data/logs/cronlog/scanphp/shell-scanphp.error_log" # 该文件用于防止新的计划任务执行相同的文件中的内容。 lock="/var/run/shell-scanphp.lock" t="date +%F-%T" php_bin="/usr/local/php-5.2.14/bin/php" if [ ! -d "$listf_d" ];then echo "$($t):$PPID-$$ ERROR: Dir "$listf_d" not exsit." >> "$log" exit 1 fi cd "$listf_d" listf=$(ls | cat) if [ -z "$listf" ];then exit 0 fi if [ ! -f "$lock" ];then touch "$lock" &>/dev/null rc=$? if [ $rc -ne 0 ];then echo "$($t):$PPID-$$ ERROR: Can‘t create lock file "$lock"." >> "$log" exit 11 fi fi for listf_f in $(echo $listf) do grep -q "$listf_f" "$lock" rc=$? if [ $rc -ne 0 ];then if [ -f "$listf_f" -a -s "$listf_f" ];then #上锁 echo "$listf_f" >> "$lock" #程序人员生成的文件只有一行路径,且无换行符,如果有换行符,可以删除以下4行。 linenum=$(wc -l "$listf_f" |cut -d " " -f1) if [ "$linenum" -eq "0" -a -s "$listf_f" ];then echo >> "$listf_f" fi while read line do if [ -f "$line" ];then "$php_bin" "$line" 2>> "$php_log" >/dev/null rc=$? if [ $rc -eq 0 ];then echo "$($t):$PPID-$$ INFO: $line exec sucess." >> "$log" else echo "$($t):$PPID-$$ ERROR: $line exec error." >> "$log" fi else #加判断,防止空行被视为无效的脚本文件写入日志。 if [ -n "$line" ];then echo "$($t):$PPID-$$ ERROR: php file($line) not exsit." >> "$log" fi fi done < "$listf_f" #遍历完一个文件的行后删除后台生成的文件,再清除锁文件中对应的记录。 rm ./"$listf_f" sed -i "/$listf_f/d" "$lock" else #加判断防止误报上一次计划任务删除的文件为无效的后台生成文件。 if [ -e "$listf_f" ];then echo "$($t):$PPID-$$ ERROR: "$listf_d/$listf_f" is a invalid generate file." >> "$log" fi fi else #上一次计划任务还未执行完该文件,跳过。 echo "$($t):$PPID-$$ NOTICE: "$listf_d/$listf_f" in process and skipped." >> "$log" fi done
本文出自 “notepad” 博客,请务必保留此出处http://sndapk.blog.51cto.com/5385144/1358947
原文:http://sndapk.blog.51cto.com/5385144/1358947