crontab定时执行和查看日志(测试乌班图18.04、20.04和centos7, centos8)
1.1启动crontab
先确定用户级别,可以是普通用户(建议),
service cron start
查看crontab状态
service cron status
修改crontab的默认编辑器,我选的vim
select-editor
Select an editor. To change later, run 'select-editor'.
1. /usr/bin/vim.gtk
2. /bin/nano <---- easiest
3. /usr/bin/vim.basic
4. /usr/bin/vim.tiny
5. /bin/ed
Choose 1-5 [2]: 1
crontab的3个常用命令
crontab -l # 查看
crontab -e # 编辑
crontab -r # 删除
方法二:用命令
1.添加任务
利用crontab -l 加 crontab file 两个命令实现自动添加
crontab -l > conf && echo "* * * * * python /home/mobile/mobile.py" >> conf && crontab conf && rm -f conf
* * * * * python /home/mobile/wps.py
由于crontab file会覆盖原有定时任务,所以使用 crontab -l 先导出原有任务到临时文件 “conf” 再追加新定时任务
优点:不限用户,任何有crontab权限的用户都能执行
缺点:稍微复杂
2.删除任务
删除任务匹配命令的
crontab -l | grep -v "python /home/mobile/mobile.py" | crontab -
crontab内容的格式
时 | 日 | 月 | 周 | 将要执行的命令 | |
---|---|---|---|---|---|
* | * | * | * | * | command |
1~59 | 0~23 | 1~31 | 1~12 | 0~6 |
例如,在每天16点34分执行一次,没有写用户的,网上很多路径前写user
34 16 * * * /usr/bin/python3 /home/yyssz/UIAutomator/UIAutomator.py
再例如:17分钟执行一次(centos7测试adb)
*/17 * * * * python /home/adb/UIAutomator/UIAutomator.py
crontab -e 于 vim /etc/crontab 的区别
crontab -e 修改的文件在 /var/spod/cron 中,一般用于普通用户级;
/etc/crontab 用于 root 用户级别。
解决方案:
步骤1:打开ubuntu的cron日志
sudo vim /etc/rsyslog.d/50-default.conf
打开文件,在文件中找到cron.*,把前面的#去掉,保存退出,输入
sudo service rsyslog restart
步骤2:安装postfix邮箱
sudo apt-get install postfix
一路全选
注:crontab执行脚本时是不会直接错误的信息输出,而是会以邮件的形式发送到你的邮箱里,这时候就需要邮件服务器了
步骤3:查看报错信息,root是安装postfix命名的,不然找不到文件
cat /var/mail/root
因为脚本是使用root账户cron执行的,所以在mail中查看root文件的输出
如果不是root用户运行,则用用户
cat /var/mail/yys
查看最后300条
tail -300 /var/spool/mail/yys
3.查看日志(centos测试可以)
1、通过查看系统日志目录下的定时任务日志
tail -300 /var/log/cron
不同的安装方法、不同的系统版本,定时任务的日志目录可能不同,不能一概论之。
如果不显示解决办法
1.打开rsyslog.conf
vi /etc/rsyslog.conf
2.去掉#,把
# module(load="imklog") # reads kernel messages (the same are read from journald)
修改为
module(load="imklog") # reads kernel messages (the same are read from journald)
3.重启日志服务:
systemctl restart rsyslog
2、通过查看当前用户mail
tail -300 /var/spool/mail/root
4.cenos7下任务
crontab -e 命令出错
在linux下输入 crontab -e 命令时,发现
no crontab for root - using an empty one
/bin/sh: /usr/bin/vi: No such file or directory
crontab: "/usr/bin/vi" exited with status 127
后来发现是没有下载vi编辑器,所以需要把默认编辑器改成vim
echo "export EDITOR=vim" >> ~/.bashrc
source ~/.bashrc
在centos7 中
启动
systemctl start crond
停止
systemctl stop crond
重启
systemctl restart crond
查看状态
systemctl status crond
可能卡住一会
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-07-08 13:55:29 CST; 4 weeks 0 days ago
Main PID: 1078 (crond)
Tasks: 51 (limit: 11442)
Memory: 56.4M
CGroup: /system.slice/crond.service
├─ 1078 /usr/sbin/crond -n
├─ 1629 /usr/local/qcloud/YunJing/YDLive/YDLive
├─ 1649 /usr/local/qcloud/stargate/bin/sgagent -d
├─ 625045 /usr/local/qcloud/YunJing/YDEyes/YDService
├─ 625109 /usr/local/qcloud/YunJing/YDEdr
├─1859849 barad_agent
├─1859863 barad_agent
└─1859864 barad_agent8月 05 21:03:01 VM-0-6-centos CROND[2462968]: (root) CMD (flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &')
8月 05 21:04:01 VM-0-6-centos CROND[2463123]: (root) CMD (flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &')
8月 05 21:05:01 VM-0-6-centos CROND[2463284]: (root) CMD (flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &')
8月 05 21:06:01 VM-0-6-centos CROND[2463440]: (root) CMD (flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &')
8月 05 21:07:01 VM-0-6-centos CROND[2463598]: (root) CMD (flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &')
8月 05 21:08:01 VM-0-6-centos CROND[2463785]: (root) CMD (flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &')
8月 05 21:09:01 VM-0-6-centos CROND[2463947]: (root) CMD (flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &')
8月 05 21:10:01 VM-0-6-centos CROND[2464108]: (root) CMD (flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &')
8月 05 21:11:02 VM-0-6-centos CROND[2464271]: (root) CMD (flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &')
8月 05 21:12:01 VM-0-6-centos CROND[2464438]: (root) CMD (flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &')
定时案例,3点时候,30分钟执行一次,
*/30 3 * * * python /home/adb/UIAutomator/UIAutomator.py
5.如何停止crontab中正在运行的job(脚本)
1. 查到你要停止的那个定时job任务的进程号
ps aux |grep UI_kuai_shou.py
2.kill-9 进程号。
kill-9 进程号
3.如果此shell为单任务时,立马ok,搞定,但如果此shell里又调用了其他子shell时,
则你需要去查到子shell的进程号,再kill掉,这样才能彻底将此定时停止掉。
这个脚本调用了其他脚本,也要停止子脚本,
ps aux |grep UI_kuai_shou2.py
kill-9 进程号
可以用脚本完成
import re
import os
process = os.popen("ps aux |grep :3329") # linux读取剪切版内容
text = process.read()
print(text)
text1 = re.compile("root\\W+(\\d+).*?:3329", re.S).findall(text)
print(text1)
for process in text1:
print(process)
os.system("kill -9 " + process)
一行代码
ps -ef | grep XXX.py | grep -v grep | awk '{print $2}' | xargs kill -9
1.是否开启
2.时间是否北京时间
3.任务下发是否正确
测试任务
*/1 * * * * bash a.sh >> /root/a.log 2>&1
本文作者: 永生
本文链接: https://yys.zone/detail/?id=144
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
评论列表 (0 条评论)