Linux 系统定时任务:crontab,anacron

简介: 二、用户定时任务1. 选项-e:执行文字编辑器来设定定时任务-l:列出目前所有定时任务-r:删除目前所有定时任务(慎用)要经常备份定时任务。因为键盘上 r 和 e 是挨着的,很可能会按错导致删除所有定时任务。


一、Cron 服务



1. 启动服务
service cron start
2. 关闭服务
service cron stop


3. 重启服务
service cron restart
4. 重新载入配置
service cron reload
5. 查看服务状态
service cron status


二、用户定时任务



1. 选项

-e:执行文字编辑器来设定定时任务

-l:列出目前所有定时任务

-r:删除目前所有定时任务(慎用)

要经常备份定时任务。因为键盘上 re 是挨着的,很可能会按错导致删除所有定时任务。

2. crontab 格式
分 时 日 月 周 command
代表意义 command
数字范围 0-59 0-23 1-31 1-12 0-7(0和7都表示周日) 需要执行的命令
特殊字符 代表意义
* 代表任何时刻。比如第一个 * 代表一个小时中每一分钟都执行一次。
, 代表不连续的时间。比如 0 8,12,16 * * * command 表示每天8点,12点,16点执行一次
- 代表连续时间范围。比如 0 8-12 * * * command 表示每天8点到12点,每小时都执行一次
*/n 那个 n 代表数字,代表‘每隔 n 单位时间执行一次’。例如 */5 * * * * command 表示每五分钟进行一次


3. 实例
  • 每1分钟执行一次command
* * * * * command
  • 每小时的第3和第15分钟执行
3,15 * * * * command
  • 在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * command
  • 每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * command
  • 每个星期一的上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 command
  • 在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次
• /usr/bin/backup
0 6-12/3 * 12 * /usr/bin/backup
  • 周一到周五每天下午 5:00 寄一封信给 alex@domain.name
0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata
  • 每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"
20 0-23/2 * * * echo "haha"
  • 每两个小时重启一次apache
0 */2 * * * /sbin/service httpd restart
  • 每天7:50开启ssh服务
50 7 * * * /sbin/service sshd start
  • 每天22:50关闭ssh服务
50 22 * * * /sbin/service sshd stop
  • 每月1号和15号检查/home 磁盘
0 0 1,15 * * fsck /home
  • 每小时的第一分执行 /home/bruce/backup这个文件
1 * * * * /home/bruce/backup
  • 每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。
0 3 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \;
  • 每月的1、11、21、31日是的6:30执行一次ls命令
30 6 */10 * * ls


三、系统定时任务


1. /etc/crontab 配置文件
crintab -e 是编辑当前用户执行的命令,也就是不同的用户身份可以执行自己的定时任务。可是有些定时任务需要系统执行,这时我们就需要编辑 /etc/crontab 这个配置文件了。
/etc/crontab 文件内容(ubuntu14.04)
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
# 一些环境变量
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# 默认的任务,定期执行
# /etc/cron.hourly
# /etc/cron.daily
# /etc/cron.weekly
# /etc/cron.monthly
# 文件夹下的脚本文件。
#
# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

只需要将定时任务按照格式添加到 `/etc/crontab` 文件中,`service cron reload` 重新载入配置即可。


2. /etc/cron.d 目录

将定时任务添加到 `/etc/cron.d` 目录下,按照 `m h dom mon dow user  command` 的格式编写定时任务,`service cron reload` 重新载入配置即可。


[vagrant/etc/cron.d] ]$ll
total 8K
-rw-r--r-- 1 root root 712 Feb  5 12:44 php
-rw-r--r-- 1 root root 102 Feb  9  2013 .placeholder
[vagrant/etc/cron.d] ]$cat php
# /etc/cron.d/php@PHP_VERSION@: crontab fragment for PHP
#  This purges session files in session.save_path older than X,
#  where X is defined in seconds as the largest value of
#  session.gc_maxlifetime from all your SAPI php.ini files
#  or 24 minutes if not defined.  The script triggers only
#  when session.save_handler=files.
#
#  WARNING: The scripts tries hard to honour all relevant
#  session PHP options, but if you do something unusual
#  you have to disable this script and take care of your
#  sessions yourself.
# 每隔30分钟寻找并清除旧的会话
# Look for and purge old sessions every 30 minutes
09,39 *     * * *     root   [ -x /usr/lib/php/sessionclean ] && if [ ! -d /run/systemd/system ]; then /usr/lib/php/sessionclean; fi
3. /etc/cron.{hourly,daily,weekly,monthly}
查看 /etc/cron.{hourly,daily,weekly,monthly} 这四个目录及目录下的文件
[vagrant/etc] ]$ll -d cron.{hourly,daily,weekly,monthly}
drwxr-xr-x 2 root root 4.0K Mar 29 09:21 cron.daily/
drwxr-xr-x 2 root root 4.0K May 10 01:52 cron.hourly/
drwxr-xr-x 2 root root 4.0K Jul 21  2015 cron.monthly/
drwxr-xr-x 2 root root 4.0K Jul 21  2015 cron.weekly/
[vagrant/etc] ]$ll cron.{hourly,daily,weekly,monthly}
cron.daily:
total 60K
-rwxr-xr-x 1 root root  625 Sep 18  2017 apache2*
-rwxr-xr-x 1 root root  16K Apr 10  2014 apt*
-rwxr-xr-x 1 root root  314 Feb 18  2014 aptitude*
-rwxr-xr-x 1 root root  355 Jun  4  2013 bsdmainutils*
-rwxr-xr-x 1 root root  256 Mar  7  2014 dpkg*
-rwxr-xr-x 1 root root  372 Jan 22  2014 logrotate*
-rwxr-xr-x 1 root root 1.3K Apr 10  2014 man-db*
-rwxr-xr-x 1 root root  435 Jun 20  2013 mlocate*
-rwxr-xr-x 1 root root  249 Feb 17  2014 passwd*
-rw-r--r-- 1 root root  102 Feb  9  2013 .placeholder
-rwxr-xr-x 1 root root 2.4K May 13  2013 popularity-contest*
-rwxr-xr-x 1 root root  322 Apr 11  2014 upstart*
cron.hourly:
total 8.0K
-rwxr-xr-x 1 root root  43 May 10 01:52 date*
-rw-r--r-- 1 root root 102 Feb  9  2013 .placeholder
cron.monthly:
total 4.0K
-rw-r--r-- 1 root root 102 Feb  9  2013 .placeholder
cron.weekly:
total 16K
-rwxr-xr-x 1 root root 730 Feb 23  2014 apt-xapian-index*
-rwxr-xr-x 1 root root 427 Apr 16  2014 fstrim*
-rwxr-xr-x 1 root root 771 Apr 10  2014 man-db*
-rw-r--r-- 1 root root 102 Feb  9  2013 .placeholder
由此可见,`/etc/cron.{hourly,daily,weekly,monthly}` 这四个目录中都是一些有执行权限的脚本文件。


cron.hourly 下的脚本每小时执行一次 cron.daily 下的脚本每天执行一次 cron.weekly 下的脚本每周执行一次 cron.monthly 下的脚本每月执行一次


四、anacron



1. anacron 是什么

anacron 是用来保证在系统关机时错过的定时任务可以在系统开机之后在执行


2. anacron 的监测周期
  • anacron 会使用一天、七天、一个月作为监测周期。
  • 在系统的 /var/spool/anacron/ 目录中存在 cron.{daily,weekly,monthly} 文件,用于记录上次执行 cron 的时间。
  • 将记录的时间与当前时间作比较,若两个时间差超过了 anacron 的指定时间差值,证明有cron任务被漏执行。


3. /etc/anacrontab 文件
[vagrant/etc] ]$cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/root
LOGNAME=root
# These replace cron's entries
1       5       cron.daily      run-parts --report /etc/cron.daily
7       10      cron.weekly     run-parts --report /etc/cron.weekly
@monthly        15      cron.monthly    run-parts --report /etc/cron.monthly
对比 /etc/crontab

返回查看 /etc/crontab 文件中有这样一段:

25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
  • test -x
    test -x /usr/sbin/anacron 表示 “检测文件 /usr/sbin/anacron 是否存在且具有“可执行”权限”
    test -x /usr/sbin/anacron 为 true,则不执行 || 后面的命令,若为 false,则执行 || 后面的命令。
    即,判断系统是否安装了 anacron , 若安装了,则忽略 /etc/crontab 中的这三条定时任务,改为使用 /etc/anacrontab 中的配置。
  • run-parts --report
    遍历目标文件夹,执行第一层目录下具有可执行权限的文件。


/etc/anacrontab 计划任务格式
天数 延迟时间(分) 工作名称 实际执行的命令
1 5 cron.daily run-parts --report /etc/cron.daily
7 10 cron.weekly run-parts --report /etc/cron.weekly
@monthly 15 cron.monthly run-parts --report /etc/cron.monthly


以 cron.daily 为例说明 anacron 执行过程
  1. /etc/anacrontab 分析到 cron.daily 的天数为 1 天。
  2. /var/spool/anacron/cron.daily 中获取最后一次执行 anacron 的时间。
  3. 将上面获取的时间与当前时间做对比,若相差时间为1天以上(含一天),就准备执行 cron.daily
  4. 根据 /etc/anacrontab 的设置,将延迟5分钟执行 cron.daily。
  5. 5分钟后,开始执行 run-parts --report /etc/cron.daily 命令,即执行 /etc/cron.daily 目录下的所有可执行文件。
相关文章
|
19天前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
151 78
|
22天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
55 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
18天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
84 13
|
2月前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
51 3
|
19天前
|
Ubuntu Linux C++
Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)
本文介绍了如何在Windows 10上安装并使用Linux子系统。首先,通过应用商店安装Windows Terminal和Linux系统(如Ubuntu)。接着,在控制面板中启用“适用于Linux的Windows子系统”并重启电脑。最后,在Windows Terminal中选择安装的Linux系统即可开始使用。文中还提供了注意事项和进一步配置的链接。
40 0
|
2月前
|
Linux
在 Linux 系统中,`find` 命令
在 Linux 系统中,`find` 命令
40 1
|
30天前
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。
|
2月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
139 8
|
2月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
556 6