1.使用crontab

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 用户级别。

2.乌班图查看日志报错

解决方案:

  步骤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_agent

8月 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

6.不执行原因排查

1.是否开启

2.时间是否北京时间

3.任务下发是否正确

测试任务

*/1 * * * *  bash a.sh >> /root/a.log 2>&1