linux定时任务
1.1 添加定时任务
crontab -e
1.2 查看cronteb任务
crontab -l
1.3 查看crontab日志
cat /var/log/cron cat /var/log/cron |tail -n 20 # 查看最后20行日志
1.4 crontab 用户操作
/sbin/service crond start//启动服务 /sbin/service crond stop //关闭服务 /sbin/service crond restart //重启服务 /sbin/service crond reload//重新载入配置 systemctl restart crond # 启动crond服务 systemctl enable crond # 设置开启自动启动
1.5 设置开机启动
vim /etc/rc.d/rc.local /sbin/service crond start
1.6 设置run.sh文件
#! /bin/bash # crontab -e: 每隔6小时执行一次 0 */6 * * * sh /PythonSpiderScrapy/scrapy_venv/NewSpider/news_crontab.sh # 指定scrapy目录 export PATH=$PATH:/PythonSpiderScrapy/scrapy_venv/bin # 指定程序所在目录(绝对路径) cd /PythonSpiderScrapy/scrapy_venv/SHANGSHIYAOPINGMULU # today=$(date +"%Y-%m-%d") # nohup scrapy crawlall nohup scrapy crawl mulu
1.7 设置定时
0 */12 * * * /bin/sh /PythonSpiderScrapy/scrapy_venv/SHANGSHIYAOPINGMULU/run.sh # 每隔12小时跑一次
分钟,小时,日,月,周 */1 * * * * rm -rf /home/down/*想要在一个时间周期内执行命令可以这样 第1列表示分钟1~59 每分钟用*或者 */1表示 第2列表示小时1~23(0表示0点) 第3列表示日期1~31 第4列表示月份1~12 第5列标识号星期0~6(0表示星期天) 第6列要运行的命令
crontab范例 每分钟执行 * * * * * 每五分钟执行 */5 * * * * 每小时执行 0 * * * * 每天执行 0 0 * * * 每周执行 0 0 * * 0 每月执行 0 0 1 * * 每年执行 0 0 1 1 *
2.crontab 关闭某个程序定时重启
#!/bin/sh # NAME=$1 # $1 运行时输入参数 为文件名称 NAME="videos" # 指定进程 echo $NAME ID=`ps -ef | grep "$NAME" | grep -v "$0" | grep -v "grep" | awk '{print $2}'` echo $ID echo "---------------" for id in $ID do kill -9 $id echo "killed $id" done echo "---------------" export PATH=$PATH://usr/local/python3.6/bin cd /root/07-shunwangwork/01-steam/steam_video/steam_video scrapy crawl videos crontab -e crontab -l */20 * * * * /bin/sh /root/video.sh chmod +x run_video.sh # 文件添加执行权限 /sbin/service crond restart
3.检测进程是否存在,不存在就重启
#!/bin/bash NAME="9000" # 指定进程 echo $NAME netstat -anp | grep $NAME &> /dev/null if [ $? -eq 0 ] then echo "clickhouse-server service is running" else echo "clickhouse-server service is stopped" systemctl restart clickhouse-server echo "clickhouse-server service is running" fi
4.关闭某个进程
#!/bin/sh NAME=$1 # $1 运行时输入参数 为文件名称 #NAME="run_video.py" # 指定进程 echo $NAME ID=`ps -ef | grep "$NAME" | grep -v "$0" | grep -v "grep" | awk '{print $2}'` echo $ID echo "---------------" for id in $ID do kill -9 $id echo "killed $id" done echo "---------------"
5.windows下写的sh脚本在liunx下运行报错,要转移一下
yum install dos2unix # 安装创建 dos2unix xxx.sh # 运行一下就可以
6.定时启动脚本
0 */2 * * * /bin/sh /root/TechXueXi-developing/SourcePackages/start.sh > /root/xxqg.log 2>&1 & * 18 * * * /bin/bash /home/yscredit/yoyo/sx_zc/jmtional_browser_policy.sh > /home/yscredit/yoyo/sx_zc/logs/jmtional_browser_policy.log 2>&1 &
0 0 * * 6 cd /home/data/Projects/yyzx && /home/data/Projects/Spider/bin/scrapy crawlall
& 表示任务在后台执行,如要在后台运行redis-server,则有 redis-server &
&& 表示前一条命令执行成功时,才执行后一条命令 ,如 echo '1‘ && echo '2'
| 表示管道,上一条命令的输出,作为下一条命令参数,如 echo 'yes' | wc -l
|| 表示上一条命令执行失败后,才执行下一条命令,如 cat nofile || echo "fail"
* 8-20/2 * * * rm -rf /home/down/*这个表示在早上8点到晚上8点之间,每两个小时执行一次后面的命令。
* * * * * sleep 20; rm -rf /home/down/* 表示20秒执行一次
30 6 * * 0 ls 指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,
0 */12 * * * /bin/sh /PythonSpiderScrapy/scrapy_venv/SHANGSHIYAOPINGMULU/run.sh
* 代表取值范围内的数字
/ 代表"每"
- 代表从某个数字到某个数字
, 代表离散的取值(取值的列表)
rm -rf /var/run/crond.pid 端口占用
which python3 查看命令安装路径
*/1 * * * * /root/kangce/caifu/kangce/bin/python3 /root/kangce/01-python/01-druginfo/druginfo.py
*/30 * * * * /bin/sh /PythonSpiderScrapy/scrapy_venv/NewSpider/news_crontab.sh