记录一次shell脚本实战
想在网站部署一个爬虫程序(springboot+quartz),程序中使用了定时任务去采集种子。由于服务器内存太小,如果一直运行的话会比较占用系统内存。理想的办法就是shell脚本+cron定时的去启动和关闭程序。
启动脚本
crawler-start.sh
#!/bin/bash
#启动爬虫程序
echo "爬虫程序正在启动,启动时间【$(date +%Y-%m-%d' '%H:%M:%S)】"
#这里使用时间戳命名爬虫日志,为后来方便排查爬虫日志
log_name=$(date +"%Y-%m-%d_%H:%M:%S")
file_name="${log_name}.log"
#创建文件
touch $file_name
#启动程序并将日志打印到文件中
java -jar /root/app/crawler.jar > /root/app/log/crawler/$file_name&
echo "爬虫程序启动完成!启动时间【$(date +%Y-%m-%d' '%H:%M:%S)】"
终止脚本
crawler-stop.sh
#!/bin/bash
# 由于爬虫程序是在后台进程中执行的,所以这里查找程序进程ID并杀死它
PID=$(ps -ef | grep "crawler.jar" | grep -v grep | awk '{print $2}')
if [[ -z "$PID" ]]; then
echo "没有找到爬虫进程【$(date +%Y-%m-%d' '%H:%M:%S)】"
exit 1
fi
echo "正在关闭爬虫程序..."
kill -9 "$PID"
echo "SpringBootApp 程序已经停止。【$(date +%Y-%m-%d' '%H:%M:%S)】"
exit 0
写入crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
#每天的凌晨3点、4点、5点启动爬虫程序,并将日志输入追加到crawler.log中
0 3-5 * * * root sh /root/app/shell/crawler-start.sh >> /root/app/log/crawler.log
#每天的凌晨3点半、4点半、5点半关闭爬虫程序,并将日志输入追加到crawler.log中
30 3-5 * * * root sh /root/app/shell/crawler-stop.sh >> /root/app/log/crawler.log