|NO.Z.00016|——————————|^^ 操作 ^^|——|Linux&进程管理.V06|——|定时任务|

一、系统定时任务:at 一次性执行定时任务
### --- at 服务管理与访问控制
~~~     at 命令要想正确执行,需要 atd 服务的支持。atd 服务是独立的服务,所以启动的命令是:

[root@server11 ~]# systemctl start atd
~~~     正在启动 atd:           [确定]
 
### --- 如果想要让 atd 服务开机时自动启动,可以使用如下命令:
~~~     atd 服务启动之后,at 命令才可以正常使用,不过我们还要学习下 at 命令的访问控制。这里的
~~~     访问控制指的是允许哪些用户使用 at 命令设定定时任务,或者不允许哪些用户使用 at 命令。大家可
~~~     以想象成为设定黑名单或设定白名单,这样更容易理解。
~~~     at 的访问控制是依靠/etc/at.allow 文件(白名单)
~~~     和/etc/at.deny 文件(黑名单)这两个文件来实现的,具体规则如下:
~~~     如果系统中有/etc/at.allow 文件,那么只有写入/etc/at.allow 文件(白名单)中的用户
~~~     可以使用 at 命令,其他用户不能使用 at 命令(/etc/at.deny 文件会被忽略,也就是说同一
~~~     个用户既写入/etc/at.allow 文件,也写入/etc/at.deny 文件,那么这个用户是可以使用 at
~~~     命令的,因为/etc/at.allow 文件优先级更高。)。
~~~     如果系统中没有/etc/at.allow 文件,只有/etc/at.deny 文件,那么写入/etc/at.deny 文件
~~~     (黑名单)中的用户不能使用 at 命令,其他用户可以使用 at 命令。不过这个文件对 root用户不生效。
~~~     如果系统中这两个文件都不存在,那么只有 root 用户可以使用 at 命令。
~~~     系统中默认时只有/etc/at.deny 文件,而且这个文件是空的,这样的话系统中所有的用户都可以
~~~     使用 at 命令。不过如果我们打算控制用户的 at 命令权限,把用户写入/etc/at.deny 文件即可
~~~     /etc/at.allow 文件的权限更高,如果/etc/at.allow 文件存在,则/etc/at.deny 文件失效。
~~~     /etc/at.allow 管理行为更加严格,因为只有写入这个文件的用户才能使用 at 命令,如果需要禁用
~~~     at 命令的用户较多,则可以把少数用户写入这个文件。/etc/at.deny 文件的管理较为松散,如果允
~~~     许使用 at 命令的用户较多,则可以把禁用的用户写入这个文件。不过这两个文件都不能对 root 用户生效。
### --- 默认是没有白名单,只有黑名单。
### --- 白名单黑名单都没有,说明只有root用户才可以执行at。

[root@server11 ~]# systemctl enable atd
二、at 命令
### --- at 命令
~~~     选项:
~~~     -m:           当 at 工作完成后,无论是否命令有输出,都用 email 通知执行 at命令的用户
~~~     -c 工作号:     显示该 at 工作的实际内容
~~~     时间:
~~~     at 支持的时间格式如下: 

[root@localhost ~]# at [选项] 时间
HH:MM                                                           // 在指定的“小时:分钟”执行命令,例如:02:30
HH:MM YYYY-MM-DD                                                // 在指定的“小时:分钟 年-月-日”执行,例如 02:30 2018-07-25
HH:MM[am|pm] [month] [date]                                     // 在指定的“小时:分钟[上午|下午][月][日]”执行,例如 02:30 July 25
HH:MM[am|pm] + [minutes|hours|days|weeks]                       // 在指定的时间“再加多久执行”,例如 now + 5 minutes,05am +2 hours
 
### --- at 命令只要指定正确的时间,就可以输入需要在指定时间执行的命令了,
### --- 这个命令可以是系统命令,也可以是 shell 脚本。举几个例子吧:
### --- 例子 1:

[root@server11 ~]# cat /root/hello.sh
#!/bin/bash
echo "hello world!!"
~~~     该脚本会打印“hello world!!”
[root@server11 ~]# at now +10 minutes
at> /root/hello.sh >> /root/hello.log
~~~     执行 hello.sh 脚本,并把输出写入/root/hello.log 文件
at> <EOT>                                                       // 使用 ctrl+d 保存 at 任务
job 1 at Fri Mar 19 21:53:00 2021                               // 这是第 1 个 at 任务,会在 201872520:54分执行
[root@server11 ~]# atq                                          // 查询计划任务的ID号
1   Fri Mar 19 21:53:00 2021 a root
[root@server11 ~]# at -c 1                                      // 通过计划任务的ID号查询执行内容
~~~     查询第 1 个 at 任务的内容
~~~     …省略部分内容…                                        // 主要是定义系统的环境变量
/root/hello.sh >> /root/hello.log
~~~     可以看到 at 执行的任务
### --- 例子 2:创建多个计划任务
~~~     在指定的时间关机。在一个 at 任务中,是可以执行多个系统命令的

[root@server11 ~]# at 02:00 2018-07-26
at> /bin/sync
at> /sbin/shutdown -h now
at> <EOT>
job 9 at 2018-07-26 02:00

三、其他 at 管理命令:at 还有查询和删除命令,命令如下:

### --- at 还有查询和删除命令,命令如下:
~~~     查询当前服务器上的 at 工作

[root@localhost ~]# atq
 
### --- 例如:
~~~     说明 root 用户有一个 at 任务在 2018726 日的 02:00 执行,工作号是 1
~~~     删除指定的 at 任务

[root@server11 ~]# atq
1   Fri Mar 19 21:53:00 2021 a root
[root@localhost ~]# atrm [工作号]
 
### --- 例如:
~~~     删除 9 号 at 任务,再查询就没有 at 任务存在了

[root@server11 ~]# atrm 1
[root@server11 ~]# at1

一、crontab 循环执行定时任务:crond 服务管理与访问控制
### --- crontab 命令是需要 crond 服务支持的,crond 服务同样是独立的服务,所以启动和自启动方法
~~~     如下:

[root@server11 ~]# systemctl start crond
~~~     停止 crond:       [确定]
~~~     正在启动 crond:     [确定]
~~~     重启动 crond 服务
### --- 设定 crond 服务为开机自启动
~~~     crond 服务默认是自启动的,如果服务器上有循环执行的系统定时任务,就不要关闭 crond 服务了。
~~~     crontab 命令和 at 命令类似,也是通过/etc/cron.allow 和/etc/cron.deny 文件来限制某些用户
~~~     是否可以使用 crontab 命令的。而且原则也非常相似:
~~~     当系统中有/etc/cron.allow 文件时,只有希尔此文件的用户可以使用 crontab 命令,没有
~~~     写入的用户不能使用 crontab 命令。同样如果有此文件,/etc/cron.deny 文件会被忽略,/etc/cron.allow 文件的优先级更高。
~~~     当系统中只有/etc/cron.deny 文件时,则写入此文件的用户不能使用 crontab 命令,没有写入文件的用户可以使用 crontab 命令。
~~~     这个规则基本和 at 的规则一直,同样/etc/cron.allow 文件的优先级比/etc/cron.deny 文件的
~~~     优先级高,Linux 中默认只有/etc/cron.deny 文件。
### --- 也是只有黑名单,没有白名单
### --- 若是有白名单,只有写入白名单的用户才可以执行crontab命令。

[root@server11 ~]# systemctl enable crond
[root@server11 ~]# ps aux |grep cron
root        972  0.0  0.0 126280  1612 ?        Ss   15:32   0:00 /usr/sbin/crond -n
二、用户的 crontab 设置
### --- 每个用户都可以实现自己的 crontab 定时任务,
### --- 只要是使用这个用户身份执行“crontab -e”命令即可,
### --- 当然这个用户不能加入/etc/cron.deny 文件中。crontab 命令格式如下:
### --- 选项:
~~~     -e:编辑 crontab 定时任务
~~~     -l:查询 crontab 任务
~~~     -r:删除当前用户所有的 crontab 任务,如果有多个任务,只想删除一个,可以所以用“crontab -e”
~~~     -u 用户名: 修改或删除其他用户的 crontab 任务。只有 root 可用

[root@localhost ~]# crontab [选项]
~~~     进入 crontab 编辑界面。会打开 vim 编辑你的工作。
~~~     * * * * * 执行的任务                                     // 可以是单一的命令,也可以是脚本;
 
[root@server11 ~]# crontab -e
项目 含义 范围
第一个“*” 一小时当中的第几分钟 0-59
第二个“*” 一天当中的第几小时 0-23
第三个“*” 一个月当中的第几天 1-31
第四个“*” 一年当中的第几月 1-12
第五个“*” 一周当中的星期几 0-7(0 和 7 都代表星期日)

在时间表示时,还有一些特殊符号需要学习,如表 15-8 所示:

  含义
* 代表任何时间,比如第一个*就代表一小时中每分钟都执行一次的意思
代表不连续的时间,比如0 8 12 16 ***命令,就代表在每天的8点0分,12点0分,16点0分都执行一次命令
- 代表连续的事假范围,比如0 5 ** 1-6命令,代表在周一到周六的凌晨5点分执行命令
*/n 代表每隔多久执行一次,比如*/10*****命令,代表每隔10分钟就执行一遍命令
举例
时间 含义
45 22 * * * 命令 在 22 点 45 分执行命令
0 17 * * 1 命令 每周 1 的 17 点 0 分执行命令
0 5 1,15 * * 命令 每月 1 号和 15 号的凌晨 5 点 0 分执行命令
40 4 * * 1-5 命令 每周一到周五的凌晨 4 点 40 分执行命令
*/10 4 * * * 命令 每天的凌晨 4 点,每隔 10 分钟执行一次命令
0 0 1,15 * 1 命令

每月 1 号和 15 号,每周 1 的 0 点 0 分都会执行命令。注意:星期几和几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱。

### --- 例子 1:让系统每隔 5 分钟,就向/tmp/test 文件中写入一行“11”,验证一下系统定时任务是否会
~~~     执行

[root@localhost ~]# crontab -e
~~~     进入编辑界面
*/5 * * * * /bin/echo ”11” >> /tmp/test
### --- 例子 2:在系统在每周二的凌晨 5 点 05 分重启一次

[root@localhost ~]# crontab -e
5 5 * * 2 /sbin/shutdown -r now
### --- 例子 3:在每月的 1 号,10 号,15 号的凌晨 3 点 30 分都定时执行日志备份脚本 autobak.sh
[root@localhost ~]# crontab -e
30 3 1,10,15 * * /root/sh/autobak.sh
[root@localhost ~]# crontab -l

~~~     查看 root 用户的 crontab 任务
~~~     删除 root 用户所有的定时任务,如果只想删除某一个定时任务,
~~~     可以“crontab -e”进入编辑模式手工删除
~~~     10****命令        每个小时的第十分钟执行一次。
~~~     */10****命令  每10分钟执行一次。
~~~     0531**命令        每个月31号执行一次,不是很合理,因为不是每个月都有31号。
[root@localhost ~]# crontab -r
### --- 例子4:写一个定时任务:每分钟不断的写入111到test文件里

[root@server11 ~]# crontab -e
 * * * * * /bin/echo 111111 >> /root/test
[root@server11 ~]# crontab -l   
* * * * * /bin/echo 111111 >> /root/test
[root@server11 ~]# cat test 
111111 

三、crontab 的注意事项

### --- crontab 的注意事项
### --- 在书写 crontab 定时任务时,需要注意几个注意事项,这里我们再强调下:

~~~     六个选项都不能为空,必须填写。如果不确定使用“*”代表任意时间;
~~~     crontab 定时任务,最小有效时间是分钟,最大时间范围是月。像 2018 年某时执行,3 点 30分 30 秒这样的时间都不能识别;
~~~     在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都是以天作为单位,非常容易让管理员混乱;
~~~     在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都是用绝对路径。
~~~     有时相对路径的命令会报错。

四、 系统的 crontab 设置

### --- 系统的 crontab 设置
~~~     “crontab -e”是每个用户执行的命令,也就是说不同的用户身份可以执行自己的定时任务。可
~~~     是有些定时任务需要系统执行,这时我们就需要编辑/etc/crontab 这个配置文件了。当然,并不是说
~~~     写入/etc/crontab 配置文件中的定时任务执行时,不需要用户身份,而是“crontab -e”命令定义定
~~~     时任务时,默认用户身份是当前登录用户。而修改/etc/crontab 配置文件时,定时任务的执行着身份
~~~     是可以手工指定的。这样定时任务的执行会更加灵活,修改起来也更加方便。
~~~     那我们打开这个文件看看吧:

[root@server11 ~]# vim /etc/crontab
SHELL=/bin/bash
~~~     标示使用哪种 shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin
~~~     指定 PATH 环境变量,crontab 是使用自己的 PATH,而不是用系统默认的,所以在定时任务中出现的命令最好使用大写
MAILTO=root
~~~     如果有报错输出,或命令结果又输出,会向 root 发信息
HOME=/
~~~     标示主目录
For details see man 4 crontabs
~~~     示大家可以去“man 4 crontabs”查看帮助
# 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-name  command to be executed
~~~     分 时 日 月 周 执行者身份 命令
~~~     列出文件格式,并加入了注释
~~~     在 CentOS 6.x 中,/etc/crontab 这个文件也发生了变化,在 CentOS 5.x 中这个文件的内容大概是这个样子:
~~~     以下输出,是在 CentOS 5.5 当中
[root@sc ~]# vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
// run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
~~~     在CentOS 5.x版本中,/etc/crontab文件会使用run-parts这个脚本在
 
### --- 这是写的一个例子

[root@server11 ~]# cat /usr/bin/run-parts
~~~     /etc/cron.{daily,weekly,monthly}目录中的所有文件。这个 run-parts 其实是一个 shell 脚本,保
~~~     存在/usr/bin/run-parts,它的作用就是把其后面跟随的目录中的所有可执行文件依次执行。也就是
~~~     说,如果我们想让某个脚本在每天都执行一次,可以不用手工去写定时任务,而只需要给这个脚本赋
~~~     予执行权限,并把它放入/etc/cron.daily/目录中。这样这个脚本就会在每天的凌晨 4 点 02 分执行了。
~~~     可是在 CentOS 6.x 版本中,/etc/crontab 文件中不再有相关的段落,那么是否 run-ptars 这种
~~~     定时任务执行方法不可用了呢?我们看到/etc/crontab 中有一句提示,让我们“man 4 crontabs”来
~~~     查看帮助,那么我们就看看这个帮助吧!在这个帮助中,明确写明了“在旧版本的 crontab 配置文件
~~~     中,是通过 run-parts 脚本来调用 cron.{daily,weekly,monthly}目录,定时执行这些目录中的脚本。
~~~     在当前系统中,为了避免 cron 和 anacron 之间产生冲突,只要 anacron 已经安装,就使用 anacron
~~~     来执行这些目录中的脚本。具体可以查看 anacron(8)的帮助。”。对于 anacron 的用法,我们下一个小节来介绍。
~~~     其实对我们用户来讲,我们并不需要知道这个定时任务到底是由哪个程序调用的。我们需要知道
~~~     的事情是如何使用系统的 crontab 设置。这个新老版本的 CentOS 没有区别,配置方法都有两种:
### --- 第一种方法就是我刚刚说过的,把你需要定时执行的工作写成脚本程序,并赋予执行权限,
~~~     然后直接把这个脚本复制到/etc/cron.{daily,weekly,monthly}目录中的任意一个。比如我
~~~     需要让某个脚本每周执行,那么就把这个脚本复制到/etc/cron.weekly/目中中。这样这个
~~~     脚本就会每周执行一次,具体的执行时间要参考 anacron 的配置。
### --- 第二种方法就是修改/etc/crontab 这个配置文件,自己加入自己的定时任务,不过需要注意指定脚本的执行者身份。例如:

[root@localhost ~]# vi /etc/crontab
~~~     …省略部分输出…
* * * * * root run-parts /root/cron/
~~~     让系统每分钟都执行一次/root/cron/目录中的脚本,脚本执行者是 root 用户。
~~~     虽然在 CentOS 6.x 中,不是直接通过此配置文件调用/etc/cron.{daily,weekly,monthly}这些目录,
~~~     但是 run-parts 脚本还是可以使用的。所以我完全可以参照 CentOS 5.x 的方法来写定时任务。
~~~     使用 run-parts 脚本调用并执行/root/cron/目录中所有的可执行文件
 
~~~     建立/root/cron 目录

[root@localhost ~]# mkdir cron
[root@localhost cron]# vi /root/cron/hello.sh
#!bin/bash
echo "hello" >> /root/cron/hello.log
~~~     在/root/cron/hello.log 文件中写入 hello
~~~     赋予执行权限
~~~     因为 hello.sh 脚本放入了/root/cron/目录,所以会每分钟执行一次。
~~~     只要保存/etc/crontab 文件,这个定时任务就可以执行了,当然要确定 crond 服务是运行的。
~~~     这两种方法都是可以使用的,具体看个人的习惯吧!不过要想修改/etc/crontab 文件,当然我要
~~~     是 root 用户才可以,普通不能修改,只能使用用户身份的 crontab 命令。

[root@localhost cron]# chmod 755 hello.sh

五、anacron

### --- nacron 是用来干什么的呢?我们的 Linux 服务器如果不是 24 小时开机的,那么刚好在关机的时
~~~     间段之内有系统定时任务(cron)需要执行,那么这些定时任务是不会执行的。也就是说,假设我们
~~~     需要在凌晨 5 点 05 分执行系统的日志备份,但是我们的 Linux 服务器不是 24 小时开机的,在晚上需
~~~     要关机,白天上班之后才会再次开机。这个定时任务的执行时间我们的服务器刚好没有开机,那么这
~~~     个任务就不会执行了。anacron 就是用来解决这个问题的。
~~~     anacron 会使用一天,七天,一个月作为检测周期,用来判断是否有定时任务在关机之后没有执
~~~     行,如果有这样的任务,anacron 会在特定的时间重新执行这些定时任务。那么 anacron 是如何判断
~~~     这 些 定 时 任 务 已 经 超 过 了 执 行 时 间 呢 ? 在 系 统 的 /var/spool/anacron/ 目 录 中 存 在
~~~     cron.{daily,weekly,monthly}文件,这些文件中都保存着 anacron 上次执行时的时间。anacron 会去
~~~     读取这些文件中的时间,然后和当前时间做比较,若果两个时间的差值超过了 anacron 的指定时间差
~~~     值(一般是 1 天,7 天和一个月),就说明有定时任务漏掉了没有被执行,这时 anacron 会介入而执
~~~     行这个漏掉的定时任务,从而保证在关机时没有被执行的定时任务不会被漏掉。
~~~     在 CentOS 6.x 中,我们使用 cronie-anacron 取代了 vixie-cron 软件包。而且在原先的 CentOS
~~~     版本中/etc/cron.{daily,weekly,monthly}这些目录中的定时任务会同时被 cron 和 anacron 调用,
~~~     这 样 非 常 容 易 出 现 重 复 执 行 同 一 个 定 时 任 务 的 错 误 。 在 现 在 的 CentOS 6.x 中 ,
~~~     /etc/cron.{daily,weekly,monthly}目录中的定时任务程序只会被 anacron 调用,从而保证这些定时
~~~     任务只会在每天、每周或每月被定时执行一次,而不会重复执行。这也是我们在上一个小节中介绍的
~~~     CentOS 6.x 的变化之一。
~~~     在 CentOS 6.x 中 anacron 还有一个变化,anacron 不再是单独的服务,而变成了系统命令。也就
~~~     是说我们不再可以使用“service anacron restart”命令来管理 anacron 服务了。而是需要使用 anacron
### --- 命令来管理 anacron 工作,具体命令如下:
### --- 选项: 
~~~     -s: 开始 anacron 工作,依据/etc/anacrontab 文件中的设定的延迟时间执行
~~~     -n: 立即执行/etc/anacrontab 中所有的工作,忽略所有的延迟时间
~~~     -u: 更新/var/spool/anacron/cron.{daily,weekly,monthly}文件中的时间戳,但不执行任何工作

[root@localhost ~]# anacron [选项] [工作名]
 
### --- 参数:
~~~     工作名:    是依据/etc/anacrontab 文件中定义的工作名
~~~     在我们当前的 Linux 中,其实不需要执行任何 anacron 命令,只需要配置好/etc/anacrontab 文
~~~     件,系统就会依赖这个文件中的设定来通过 anacron 执行定时任务。那么关键就是/etc/anacrontab
~~~     文件的内容了,这个文件如下:

[root@localhost ~]# vi /etc/anacrontab
// /etc/anacrontab: configuration file for anacron
// See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
~~~     前面的内容和/etc/crontab 类似
~~~     the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
~~~     最大随机延迟。
~~~     the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
~~~     anacron 的执行时间范围是 3:00-22:00
~~~     period in days delay in minutes     job-identifier  command
1       5           cron.daily          nice run-parts /etc/cron.daily
7   25   cron.weekly                    nice run-parts /etc/cron.weekly 
@monthly 45  cron.monthly               nice run-parts /etc/cron.monthly
~~~     天数 强制延迟(分) 工作名称             实际执行的命令 
~~~     时间差超过天数时,强制延迟多少分钟之后,就执行命令
~~~     这个文件中“RANDOM_DELAY”定义的是最大随机延迟,也就是说 cron.daily 任务如果超过 1 天
~~~     没有执行,并不会马上执行,而是先延迟强制延迟时间之后,再延迟随机延迟时间之后再执行命令。
~~~     “START_HOURS_RANGE”定义 anacron 的执行时间范围,anacron 只会在这个时间范围之内执行。
~~~     我们用 cron.daily 工作来说明下/etc/anacrontab 的执行过程:
~~~     首先读取/var/spool/anacron/cron.daily 中的上一次 anacron 执行的时间;
~~~     和当前时间比较,如果两个时间的差值超过 1 天,就执行 cron.daily 工作;
~~~     执行这个工作只能在 03:00-22:00 之间;
~~~     执行工作时强制延迟时间为 5 分钟,再随机延迟 0-45 分钟时间;
~~~     使用 nice 命令指定默认优先级,使用 run-parts 脚本执行/etc/cron.daily 目录中的所有可执行文件。
 
### --- 大家发现了吧,/etc/cron.{daily,weekly,monthly}中的脚本,
~~~     在当前的 Linux 中是被 anacron调用的,不再依靠 cron 服务。
~~~     不过 anacron 不用设置多余的配置,
~~~     我们只需要把需要定时执行的脚本放入/etc/cron.{daily,weekly,monthly}目录当中,
~~~     就会每天、每周或每月执行,而且也不再需要启动 anacron 服务了。
~~~     我们如果做修改的话,只用修改/etc/anacrontab 配置文件即可。
~~~     比如我更加习惯让定时任务在凌晨 03:00-05:00 执行,就可以如下修改:

[root@localhost ~]# vi /etc/anacrontab
#/etc/anacrontab: configuration file for anacron
#See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
#the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=0
~~~     随机延迟改为 0 分钟,不再随机延迟
#the jobs will be started during the following hours only
START_HOURS_RANGE=3-5
~~~     执行时间范围为 03:00-05:00
// period in days delay in minutes      job-identifier  command
1   0   cron.daily                          nice run-parts /etc/cron.daily
7   0   cron.weekly                         nice run-parts /etc/cron.weekly
@monthly 0  cron.monthly                    nice run-parts /etc/cron.monthly
~~~     强制延迟也改为 0 分钟,不再强制延迟
~~~     这样我们所有放入/etc/cron.{daily,weekly,monthly}目录中的脚本都会在指定时间运行了,而
~~~     且也不怕服务器万一关机的情况了。

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

posted on   yanqi_vip  阅读(28)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示