原创内容,转载请注明出处:https://www.myzhenai.com.cn/post/3157.html
关键词:linux shell 计数器
这个脚本是应hostloc社区的一个朋友的要求写的,是需要每隔多少天就执行一次指定脚本,如果使用crontab来设置的话不能完善或完美的达到要求,所以就需要写一个简单的计数器来进行统计,我这个脚本的思路是这样的。
1、创建一个文本文档来储存脚本运行次数
2、每次脚本运行后就去读取文本文档里的数值并判断
3、为了避免系统重启造成脚本多次重复的计数,增加了一个对比当前系统时间来判断
运行脚本的方法
* * * * * * root bash rundate.sh 25 #假设需要每25天生效一次
脚本命令代码注释
# !/bin/bash -x # filename: running.sh ############################################################################################################################################################################################### # # This is a lottery number automatic generation tool # Autor: RucLinux # Web: https://www.myzhenai.com.cn/ https://www.myzhenai.com/ https://jiayu.mybabya.com/ https://mangshe.python.hn.cn/ # ############################################################################################################################################################################################### #curr_run_time这个变量是你定的时间参数 #phat这个变量是存储数值的文本路径 #$1变量是脚本的第一个参数,85即是第一个参数,例如在crontab里是 * * * * * root bash running.sh 85 #$i变量是获取到文本里的数值 #我注释掉的那两行那里可以放入你需要执行的脚本或代码 # # curr_run_time=`date +%s` #这是时间变量 phat="rundate.log" # 这个是存储计数的文本文件 ni=$(date +20%y-%m-%d) #这是获取系统时间年月日,避免一天内因为系统重启而重复计数 if [ ! -n "${1}" ]; then #第一次判断,判断需要对比的数值是不是为空,如果希望第25天生效,那么就要将这个参数传参为25 echo "Please enter a specified value" else value="${1}" if [ ! -f "${phat}" ]; then #第二次判断,判断存储计数的文本文件是否存在 touch "${phat}" echo -e "1|${ni}" > "${phat}" #如果文本文件不存在,自动创建一个并做原始的赋值 else i=$(cat "${phat}" | sed '/^\s*$/d' | awk -F "|" '{ print $1 }') #提取计数文本里的次数 ii=$(cat "${phat}" | sed '/^\s*$/d' | awk -F "|" '{ print $2 }') #提取计数文本里的日期 if [ "${ii}" != "${ni}" ]; then #第三次判断,如果现行时间的年月日与计数文本里的年月日相等,不进行任何操作,以免因为系统重启等原因进行多余计数 if [ "${i}" != "${value}" ]; then #第四次判断,判断计数文本里的数值是否等于传入参数的数值,相等即是符合执行要求了,不相等就继续计数 li=$(($i+1)) # echo -e "${li}|${ni}" > "${phat}" #这个是每天运行一次就自动在计数文本里的计算数值加1 else #这里是要运行的脚本或代码 # echo "This is time $1" #调试命令,这行可以删除,运行脚本如果看到这一行即代表符合所有要求了 echo -e "1|${ni}" > "${phat}" #将数值设置为1并重新计数 fi fi fi fi #把脚本放在crontab里,指定6个小时执行一次,因为这个脚本做了几重判断,判断系统时间避免因为系统重启而重复计数,所以可能会存在计数到25的时候却是26才会启发判断代码,所以需要一天执行两次。这样就可以做到当天就运行所设置的内容。 #你可以在本机上调试一下,可以通过修改rundate.log这个文本里的|符号左右两边的数据来进行调试。
完整脚本命令代码
# !/bin/bash -x # filename: running.sh ############################################################################################################################################################################################### # # This is a lottery number automatic generation tool # Autor: RucLinux # Web: https://www.myzhenai.com.cn/ https://www.myzhenai.com/ https://jiayu.mybabya.com/ https://mangshe.python.hn.cn/ # ############################################################################################################################################################################################### curr_run_time=`date +%s` phat="/var/log/rundate.log" ni=$(date +20%y-%m-%d) if [ ! -n "${1}" ]; then echo "Please enter a specified value" else value="${1}" if [ ! -f "${phat}" ]; then touch "${phat}" echo -e "1|${ni}" > "${phat}" else i=$(cat "${phat}" | sed '/^\s*$/d' | awk -F "|" '{ print $1 }') ii=$(cat "${phat}" | sed '/^\s*$/d' | awk -F "|" '{ print $2 }') if [ "${ii}" != "${ni}" ]; then if [ "${i}" != "${value}" ]; then li=$(($i+1)) echo -e "${li}|${ni}" > "${phat}" else #这里是要执行的脚本或代码 # echo -e "1|${ni}" > "${phat}" fi fi fi fi
sicnature ---------------------------------------------------------------------
I P 地 址: 18.97.14.90
区 域 位 置: 美国马萨诸塞
系 统 信 息:
Original content, please indicate the source:
同福客栈论坛 | 蟒蛇科普 | 海南乡情论坛 | JiaYu Blog
sicnature ---------------------------------------------------------------------
Welcome to reprint. Please indicate the source https://www.myzhenai.com.cn/post/3157.html
没有评论