最近有个需求:定时检测某个目录下的文件个数是否超过n个,若超过则清理日期较早的m-1个文件;由于第一个文件可能被有些进程占用,因此删除日期较早的前m个除去最早的一个。
具体的shell脚本如下:
############################ # author : lijd # date : 2021-04-20 ############################ #!/bin/bash main() { while [ 1 ] do datapath=$(date +%Y)"/"$(date +%m)"/"$(date +%d)"/" filepath="/data/sp"$datapath file_num=`ls "/data/sp"$datapath -l | grep ".dq" | wc -l` if [ $file_num -gt 15 ] then cd $filepath && ls -ltr | grep ".dq" | awk '{print $9}' | head -n 10 | tail -n 9 | xargs rm -rf fi sleep 60 done } main主要执行语句:ls -ltr | grep ".dq" | awk '{print $9}' | head -n 10 | tail -n 9 | xargs rm -rf
定时检测某个进程是否存在,不存在启动。具体的shell脚本如下:
############################ # author : lijd # date : 2021-04-20 ############################ #!/bin/bash main() { while [ 1 ] do process_num=`ps aux | grep hqccgsvc | grep -v grep |wc -l` if [ $process_num -eq 0 ] then cd /root/ccg_cvi/ccg/ && ./hqccgsvc -start nowtime=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"` echo $nowtime hqccgsvc segfault >> /root/ccg_cvi/cvi_ccg_monitor.log fi sleep 60 done } main
部分数据文件可能导致进程读取崩溃,删除异常的数据文件然后重启进程。具体的shell脚本如下:
############################ # author : lijd # date : 2021-04-20 ############################ #!/bin/bash BakErrFile() { datapath=$(date +%Y)"/"$(date +%m)"/"$(date +%d)"/" filepath="/data/sp"$datapath file_num=`ls "/data/sp"$datapath -l | grep ".dq" | wc -l` if [ $file_num -gt 5 ] then cd $filepath && ls -ltr | grep ".dq" | awk '{print $9}' | head -n 1 | xargs -t -i mv {} {}.bak fi } main() { while [ 1 ] do process_ccg_num=`ps aux | grep hqccgsvc | grep -v grep |wc -l` if [ $process_ccg_num -eq 0 ] then cd /root/ccg_cvi/ccg/ && ./hqccgsvc -start nowtime=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"` echo $nowtime hqccgsvc segfault >> /root/ccg_cvi/cvi_ccg_monitor.log fi process_sp_num=`ps aux | grep spsvc_analyze | grep -v grep |wc -l` if [ $process_sp_num -eq 0 ] then cd /root/ccg_cvi/spanalyze/ && ./spsvc_analyze -start nowtime=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"` echo $nowtime spsvc_analyze segfault >> /root/ccg_cvi/cvi_ccg_monitor.log fi process_spa_num=`ps aux | grep spasvc_analyze | grep -v grep |wc -l` if [ $process_spa_num -eq 0 ] then BakErrFile cd /root/ccg_cvi/spanalyze/ && ./spasvc_analyze -start nowtime=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"` echo $nowtime spasvc_analyze segfault >> /root/ccg_cvi/cvi_ccg_monitor.log fi sleep 60 done } main主要执行语句:ls -ltr | grep ".dq" | awk '{print $9}' | head -n 1 | xargs -t -i mv {} {}.bak
检查当天对应的文件夹是否存在,如果存在并检查其最新修改时间,如果条件不满足则重启系统。具体的shell脚本如下:
############################ # author : lijd # date : 2024-10-30 ############################ #!/bin/bash main() { systemstarttime=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"` echo "$systemstarttime info : adasMonitor start ~~~" >> /usr/local/adasMonitor.log while [ 1 ]; do # 获取当前时间 nowtime=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"` # 获取系统启动时间的时间戳(单位:秒) systemuptime=$(printf "%.0f" $(cat /proc/uptime | cut -d" " -f1)) # 获取adas附件服务连接数 adas_connect_num=`netstat -anp| grep 10011 | grep ESTABLISHED| wc -l` # 如果系统重启时间超过1天且ADAS连接数超过1才能进入监控 if [ $systemuptime -gt 86400 ] && [ $adas_connect_num -gt 1 ]; then datapath=$(date +%Y)"/"$(date +%m)"/"$(date +%d)"/" filepath="/data/media/"$datapath echo "$nowtime info : filepath : $filepath" >> /usr/local/adasMonitor.log # 获取当前时间 current_time=$(date +%s) if [ -d "$filepath" ]; then # 获取文件夹最后修改时间 last_modified=$(stat -c %Y "$filepath") # 计算时间差(单位:秒) time_diff=$((current_time - last_modified)) echo "$nowtime info : $filepath last modified --> nowtime : $time_diff" >> /usr/local/adasMonitor.log # 文件夹更新时间超30分钟 if [ $time_diff -gt 1800 ]; then echo "$nowtime error : $filepath last modified --> nowtime : $time_diff" >> /usr/local/adasMonitor.log sudo reboot; fi else echo "$nowtime warning : $filepath is not exit!" >> /usr/local/adasMonitor.log # 获取今天0点0分0秒的时间戳 midnight_timestamp=$(date -d "today 00:00:00" +%s) # 计算时间差(单位:秒) time_diff=$((current_time - midnight_timestamp)) # 判断时间差是否大于10分钟 if [ $time_diff -gt 600 ]; then echo "$nowtime error : $filepath is not exit and great 600 seconds!" >> /usr/local/adasMonitor.log sudo reboot; fi fi fi sleep 3600 done } main
本文介绍使用Shell脚本实现定时任务的方法,包括监控指定目录下的文件数量并进行清理,以及检查特定进程的状态并重启,确保系统的稳定运行。
2052

被折叠的 条评论
为什么被折叠?



