CentOS 定时计划任务设置
<div class="lake-content"><h2 class="ne-p"><span class="ne-text">前言</span></h2>
<p>在Linux系统中,cron的配置文件分为两种:<br>1、系统级的 crontab 文件(如 /etc/crontab 或 /etc/cron.d/*):<br>- 在这些文件中,需要显式指定运行任务的用户。<br>- 语法为:* * * * * 用户名 命令</p>
<div class="cnblogs_code">
<pre># 示例
*/1 * * * * root /bin/bash /opt/scripts/date.sh > /dev/null 2>&1</pre>
</div>
<p>2、用户级的 crontab 文件(通过 crontab -e 编辑):<br>- 在这种情况下,不需要也不允许指定用户。</p>
<p>- 通过crontab -e编辑的计划任务会保存在<strong>/var/spool/cron/</strong>目录下。</p>
<p>- 语法为:* * * * * 命令</p>
<div class="cnblogs_code">
<pre># 示例
*/1 * * * * /bin/bash /opt/scripts/date.sh > /dev/null 2>&1</pre>
</div>
<h2 id="ud4b31d9b" class="ne-p"><span class="ne-text">一、安装crontab服务并设置开机自启</span></h2>
<div class="cnblogs_code">
<pre>yum install crontabs(centos默认就会带,一般不需要安装)
systemctl enable crond (设为开机启动)
systemctl start crond(启动crond服务)
systemctl status crond (查看状态)</pre>
</div>
<div class="lake-content">
<h2 id="udd7fad8a" class="ne-p"><span class="ne-text">二、设置用户自定义定时任务</span></h2>
<p>定时任务有两种配置方式:<br>1、在/etc/crontab下设置,需要指定用户名。<br>2、直接用crontab -e,不需要指定用户名。</p>
<div class="cnblogs_code">
<pre>vim /etc/crontab<br>SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# |.------------- hour (0 - 23)
# ||.---------- day of month (1 - 31)
# |||.------- month (1 - 12) OR jan,feb,mar,apr ...
# ||||.---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |||||
# ***** user-namecommand to be executed</pre>
</div>
<div class="lake-content">
<p id="ucd1afe78" class="ne-p"><span class="ne-text"> 定义了MAILTO这个变量,那么crontab会将stdout的内容以邮件的形式发送到MAILTO定义的邮箱中。(<span class="ne-text">MAILTO<span class="ne-text">=myuser<span class="ne-text">@163<span class="ne-text">.com<span class="ne-text">)</span></span></span></span></span></span></p>
<p id="u0bef1b44" class="ne-p"><span class="ne-text"> 分钟(0-59) 小时(0-23) 日(1-31) 月(11-12) 星期(0-6,0表示周日) 用户名 要执行的命令</span></p>
<p class="ne-p"><strong><span class="ne-text">示例:</span></strong></p>
<div class="cnblogs_code">
<pre>vim /etc/crontab<br># 每天,每5分钟执行一次时间同步
*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com > /dev/null 2>&1</pre>
<pre># 每天凌晨二点,执行命令脚本,这里由于第一个的分钟没有设置,那么就会每天凌晨2点的每分钟都执行一次命令
* 2 * * * root /data/myshell.sh
# 每天凌晨二点整执行一次命令脚本
0 2 * * * root /data/myshell.sh
# 每天11点到13点之间,每10分钟执行一次命令脚本
*/10 11-13 * * * root /data/myshell.sh
# 每小时的10-30分钟,每分钟执行一次命令脚本,共执行20次
10-30 * * * * root /data/myshell.sh
# 每小时的10,30分钟,分别执行一次命令脚本,共执行2次
10,30 * * * * * root /data/myshell.sh
# 周一到周五每天的9点到14点,每5min执行一次python脚本
*/5 9-14 * * 1-5 /root/gold.py
# 周一到周五的15点到15点35分,每5min执行一次python脚本
0-35/5 15 * * 1-5 /root/gold.py<br><br># 每周6晚上23点执行一次脚本<br>0 23 * * 6 root /bin/bash /opt/scripts/config-backup/configbackup.sh > /dev/null 2>&1</pre>
</div>
<p><strong>注意:</strong><br> crond的计划任务并不会调用用户设置的环境变量,在执行计划任务时,用的时crond自己的环境变量,所以有些脚本手工执行是可以的,但是计划任务就不行,此时要么写脚本的绝对路径,要么将环境便俩个添加到/etc/crontab中;</p>
<p><strong>遇到的问题:</strong></p>
<div class="cnblogs_code">
<pre># */5 9-14 * * 1-5 root /usr/local/python3/bin/python3 /root/gold.py
这种写法虽然脚本能执行成功,但是cron的执行日志中会有相关的报错,看着很不爽,于是就有了下面这种写法;
# */5 9-14 * * 1-5 /root/gold.py 这种写法有一个前提,需要指定执行脚本的解释器,也就是"#!/usr/local/python3/bin/python3";
不知道是不是我是root的缘故,当在cron中加入执行用户root时,脚本能执行成功,但是cron的执行日志中仍然会报错,于是就干脆取消了,不知道普通用户状态下会不会出现这种问题;(测试系统:CentOS 7.7)</pre>
</div>
<h2>三、保存生效</h2>
<div class="cnblogs_code">
<pre># 加载任务使其生效
crontab /etc/crontab (每一次的改动都需要执行,否则不生效)
# 查看任务
crontab -l
# 直接编辑
crontab -e (或者直接vim /etc/crontab)
注意:如果第一次写计划任务直接执行crontab -e,则计划任务文件是保存在/tmp目录下的,关机重启会失效;所以推荐"vim /etc/crontab";</pre>
</div>
<h2> 四、/var/log/cron无日志输出解决办法</h2>
<p> 有时候会遇到/var/log/cron下是空白或者不记录日志的情况,通常可以尝试重启下crond服务(systemctl restart crond.service)和rsyslog(systemctl restart rsyslog)服务。如果还是没有日志输出,就需要去看/etc/rsyslog.conf配置文件,是否禁止输出cron日志,修改成正确的格式之后,保存并重启crond服务和rsyslog服务。</p>
<p>https://tooltt.com/crontab/c/34.html # 一个很好的学习计划任务的网站</p>
</div>
</div>
</div><br><br>
来源:https://www.cnblogs.com/zhangzhide/p/15528109.html
頁:
[1]