这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战
简介
我们可能会对linux进行简单的监控或者定期执行一些操作,因此会用到linux自带的定时任务功能.
语法
man
Usage:
crontab [options] file
crontab [options]
crontab -n [hostname]
Options:
-u <user> define user
-e edit user's crontab
-l list user's crontab
-r delete user's crontab
-i prompt before deleting
-n <host> set host in cluster to run users' crontabs
-c get host in cluster to run users' crontabs
-s selinux context
-x <mask> enable debugging
复制代码
1. 查看定时任务
1)查看当前用户的
crontab -l
复制代码
如果该服务器被挖矿,他很可能也同时执行了定时任务,用此命令可以看到挖矿的脚本
2)查看指定用户的
crontab -l -u zzz # zzz为系统存在的一个用户
复制代码
查看指定用户(zzz)正在执行的任务 ,只需要添加-u参数即可,其他命令也同理
3)查看系统所有用户的
cat /etc/passwd |cut -f 1 -d : |xargs -I {} crontab -l -u {}
复制代码
2. 删除当前的定时任务
crontab -r
复制代码
3.新增或编辑定时任务
crontab -e
复制代码
进入编辑模式, 按照指定任务命令格式编辑命令, 格式参照下面的任务命令格式
4.查看支持的环境变量
cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root #发送邮件到账号
复制代码
任务命令格式
任务命令分为两个部分: 第一部分是cron表达是, 后面跟着sh命令
例子
* * * * * /root/date.sh # 每分钟执行一次date.sh脚本文件
0 * * * * echo '-------------' >> /root/date.txt # 每小时0分的时候向date.txt文件中加入一句话
* 1 * * 0 rm -rf /root/date1 #每个星期的星期天的1点左右删除date1文件
复制代码
cron表达式的语法规则
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
复制代码
sh命令语法规则
单行的可执行的sh命令, 可以是运行shell脚本的命令,也可以是直接的sh命令
其他
1) 任务是否执行查询
在/var/log/
目录下有cron
开头的文件, 里面包含了crontab的执行记录
Feb 19 10:19:01 zdc CROND[8314]: (root) CMD (/root/date.sh)
Feb 19 10:20:01 zdc CROND[8390]: (root) CMD (/root/date.sh)
Feb 19 10:21:01 zdc CROND[8440]: (root) CMD (/root/date.sh)
Feb 19 10:22:01 zdc CROND[8487]: (root) CMD (/root/date.sh)
Feb 19 10:23:01 zdc CROND[8544]: (root) CMD (/root/date.sh)
复制代码
推荐将任务写成脚本, 在其中添加执行成功失败之类的输出逻辑,自定义输出到指定文件中 如
...业务逻辑
echo "成功" >> /root/date.info
复制代码
2) 任务是否出错判断
当任务执行过程中报错后,会给当前用户发送邮件,默认情况下在/var/spool/mail
中的对应用户文件下
您在 /var/spool/mail/root 中有新邮件
复制代码
...
X-Cron-Env: <XDG_SESSION_ID=4303>
X-Cron-Env: <XDG_RUNTIME_DIR=/run/user/0>
X-Cron-Env: <LANG=zh_CN.UTF-8>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Message-Id: <[email protected]>
Date: Fri, 19 Feb 2021 10:31:02 +0800 (CST)
/root/date.sh:行3: success: 未找到命令
复制代码
crontab发送邮件
发送到外部邮箱,以qq邮箱为例
在cat /etc/crontab
将MAILTO=root
修改为你需要的外部邮箱账号
且在crontab -e
的第一行添加MAILTO=外部邮箱账号
并且配合linux发送邮件文章使用
结束语
尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
如果您喜欢我的文章,可以[关注]+[点赞]+[评论],您的三连是我前进的动力,期待与您共同成长~
作者:ZOUZDC
链接:https://juejin.cn/post/7028963866063306760
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
复制代码