crond定时任务详细分析

操作系统 2022-10-28

一、定时任务crond的介绍

crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件。一般情况下,我们安装文成系统之后,默认变回启动crond任务调度服务,crond服务会定期(默认每分钟检查一次)检查系统中是否有要执行的任务工作。如果有,变会根据预先设定的定时任务自动执行该定时任务,就如同生活中的闹钟一样。

[root@iZ94lm56da9Z ~]# chkconfig --list|grep crond    <--查询是否开启
crond              0:off    1:off    2:on    3:on    4:on    5:on    6:off
[root@iZ94lm56da9Z ~]# crontab -l    <--查询crond的配置
no crontab for root

因为crond是每分钟级别,如果crond服务搞不定了,一般工作中写脚本守护程序进程:

[root@iZ94lm56da9Z ~]# cat corn 
while true
do
    echo "wangde .....Rui"
    sleep 1
done
#内容意思为每秒echo出"wangde .....Rui"。

补充两个概念:

    程序文件:程序代码组成,但是没有在计算机内执行。当前没有执行。

    守护程序或者守护进程:进程就是在计算机中正在执行的程序;守护进程就是一直运行的程序。

可以看出定时任务是一个守护进程。

[root@iZ94lm56da9Z ~]# ps -ef |grep crond
root       923     1  0 Aug25 ?        00:00:00 crond
root     27961 27915  0 15:29 pts/0    00:00:00 grep crond

crond和ssh一样是一直在后台运行的守护进程:

[root@iZ94lm56da9Z ~]# /etc/init.d/sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
[root@iZ94lm56da9Z ~]# /etc/init.d/crond restart
Stopping crond:                                            [  OK  ]
Starting crond:                                            [  OK  ]

二、不同系统的定时任务

windows的定时任务存放位置:所有程序->附件->系统工具->任务计划程序

crond定时任务详细分析-Ricky's Blog

Linux系统的定时任务调度的工作可以分为以下两种情况:

1.linux系统自身定期执行的任务工作:

系统周期性的自行执行的任务工作,例如轮循备份系统日志、备份系统数据、清理系统缓存等,这些任务无需我们人为干预。如下:

[root@alone ~]# ll /var/log/messages*
-rw-------  1 root root 113765 8月  23 23:49 /var/log/messages
-rw-------. 1 root root 226986 8月   7 02:58 /var/log/messages-20160807
-rw-------  1 root root  25713 8月  14 02:58 /var/log/messages-20160814
-rw-------  1 root root  25649 8月  21 02:58 /var/log/messages-20160821
[root@alone ~]# ll /var/log/secure*
-rw-------  1 root root  43166 8月  23 23:44 /var/log/secure
-rw-------. 1 root root  91198 8月   7 03:16 /var/log/secure-20160807
-rw-------  1 root root 133631 8月  14 03:46 /var/log/secure-20160814
-rw-------  1 root root 134102 8月  21 03:30 /var/log/secure-20160821
#每周一份日志,系统自身执行的定时任务

系统默认执行的日志脚本存放位置:

[root@alone ~]# cd /etc/logrotate.d/
[root@alone logrotate.d]# pwd
/etc/logrotate.d
[root@alone logrotate.d]# ls -lrt
总用量 32
-rw-r--r--. 1 root root 136 8月  23 2010 ppp
-rw-r--r--. 1 root root 329 7月  17 2012 psacct
-rw-r--r--. 1 root root 100 2月   4 2013 wpa_supplicant
-rw-r--r--. 1 root root 100 2月  22 2013 yum
-rw-r--r--. 1 root root 210 8月  15 2013 syslog
-rw-r--r--. 1 root root  71 8月  17 2013 cups
-rw-r--r--. 1 root root 219 11月 23 2013 sssd
-rw-r--r--. 1 root root 103 11月 26 2013 dracut
[root@alone logrotate.d]# 
[root@alone logrotate.d]# less syslog 
[root@alone logrotate.d]# cat syslog |grep -v '^$'
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    sharedscripts
    postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

系统自动轮循任务的设置配置路径:

[root@alone logrotate.d]# ll /etc/ |grep cron
-rw-------.  1 root root    541 11月 23 2013 anacrontab
drwxr-xr-x.  2 root root   4096 7月  27 13:14 cron.d
drwxr-xr-x.  2 root root   4096 7月  27 13:17 cron.daily
-rw-------.  1 root root      0 11月 23 2013 cron.deny
drwxr-xr-x.  2 root root   4096 7月  27 13:13 cron.hourly
drwxr-xr-x.  2 root root   4096 7月  27 13:15 cron.monthly
-rw-r--r--.  1 root root    457 9月  27 2011 crontab
drwxr-xr-x.  2 root root   4096 9月  27 2011 cron.weekly
[root@alone logrotate.d]# pwd
/etc/logrotate.d

以下是系统及的定时任务,一般用户自定义的定时任务不会放在这里:

[root@alone logrotate.d]# cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# 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

2.用户执行的定时任务:

某个用户或者系统管理员定期要做的任务工作,例如每个5分钟和互联网时间服务器同步(当然这个是最基础的系统优化),每天晚上0点备份站点数据及数据库数据,这些工作一般都是用户自己设定定时任务才行,

例如:服务器时间同步:

[root@iZ94lm56da9Z ~]# crontab -l
*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1

三、linux系统下定时任务软件的种类

linux系统下基本有以下几种:at(适合只执行一次)、crontab(最常用)、anacron。

at:适合执行一次就借宿的调度任务命令。例如:在今晚需要处理一个任务,仅仅是今天晚上,属于突发性的工作任务。要执行at命令,还需要启动一个名为atd的服务才行。(在工作中不常用,所以默认为关闭状态)

[root@iZ94lm56da9Z ~]# chkconfig --list |grep atd
atd                0:off    1:off    2:off    3:off    4:off    5:off    6:off

anacron:这个命令主要用于非7*24小时开机的服务器准备的,anacron并不能指定具体时间执行任务,而是以天为周期或者在系统每次开机后执行的任务工作。他会检测服务器停机期间应该执行但没有进行的任务工作,并将该任务执行一遍。(工作中一般服务器是持续开机,所以一般不怎么用)

备注:

1.这里的crond服务是运行的程序,而crontab命令用户用来设置定时规则的命令

2.crond服务是工作冲常用的重要服务,at和anacron很少使用,可以忽略,

3.工作中几乎每个服务器都会用到crond服务。

四、crontab命令的格式 (下面进入主题)

crond    守护进程,一直运行着的

crontab    设置命令,-e 编辑;-l 列表。

[root@alone logrotate.d]# crontab -h
crontab:无效选项 -- h
crontab: usage error: unrecognized option
usage:    crontab [-u user] file
    crontab [-u user] [ -e | -l | -r ]
        (default operation is replace, per 1003.2)
    -e    (edit user's crontab)
    -l    (list user's crontab)
    -r    (delete user's crontab)
    -i    (prompt before deleting user's crontab)
    -s    (selinux context)

crontab -e  相当于 vi /var/spool/cron/root

crontab -l   相当于 cat /var/spool/cron/root

[root@iZ94lm56da9Z ~]# crontab -l
*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
[root@iZ94lm56da9Z ~]# cat /var/spool/cron/root 
*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1

让普通用户执行crontab -u richy -e   或者 切换到richy用户下 再使用crontab

crontab 定时任务命令字段解释

*           *         *         *           *

0-59   0-23   1-31   1-12     0-6

*  每   * * * * * /bin/sh/scripts/richy.sh  每分钟执行richy.sh

-  范围    00 17-19 * * * /bin/sh/scripts/richy.sh  每天17点,18点,19点整执行richy.sh

, 分隔   30 17,18,19 * * * /bin/sh/scripts/richy.sh  每天17:30,18:30,19:30执行richy.sh

/n  每单位时间   */10 * * * * /bin/sh/scripts/richy.sh  每10分钟执行richy.sh

30 3-5 17-19 * * /bin/sh/scripts/richy.sh  每月的17,18,19号的3:30,4:30,5:30执行命令richy.sh

五、crontab编辑定时任务依赖的服务

[root@iZ94lm56da9Z ~]# chkconfig --list |grep crond
crond              0:off    1:off    2:on    3:on    4:on    5:on    6:off
[root@iZ94lm56da9Z ~]# ps -ef |grep crond |grep -v grep
root     27988     1  0 15:30 ?        00:00:00 crond

六、crondtab的总结

定时任务要加注释;

结尾不要有>/dev/null 2>&1;

如果存在目录,目录必须要存在,因为crontab不会创建新目录;

定时任务中的路径一定要是绝对路径;

crond服务必须开启并运行;

相关阅读

将 ONLYOFFICE 桌面编辑器安装

在线编辑器的桌面版本不需要持续连接到互联网,并且可以处理本地文件。 要安装桌面编辑器,可以使用以下选项之一: 本指南介绍如何从存储库安装 ONLYOFFICE 桌面编辑器。 从存储库安装 ONLYOFFICE 桌面编辑器 安装桌面编辑器的更好选择是将其存储库添加到您的 Linux 操作系统中。为此: 运行 ONLYOFFICE 桌面编辑器 安装结束后,您可以使用终端命令运行编辑器: 如果您更喜欢使…

CentOS kali 工具 2023-07-26
将 ONLYOFFICE 桌面编辑器安装

KALI 安装 nessus

1、网址部分: 注册获取激活码地址:https://zh-cn.tenable.com/products/nessus/nessus-essentials 离线激活地址:https://plugins.nessus.org/v2/offline.php 官网下载地址:https://www.tenable.com/downloads/nessus 2、进入激活码,填写姓名,邮箱申请激活码,进入邮箱…

kali 2023-07-13
KALI 安装 nessus

Windows Server 2012 如何实现多个用户远程桌面登陆

Windows Server 2012 如何实现多个用户远程桌面登陆?说明:Windows Server 2012默认情况下,只运行2个用户远程桌面登陆,这里我们可以通过安装远程桌面会话主机配置来实现2个以上用户的远程桌面登陆。1、 安装桌面会话主机和远程桌面授权1)在“控制面板”中,打开“服务器管理器”,选择“基于角色或基于功能的安装”,出现以下的安装界面 2) 下一步 3) 选择远程桌面服务 …

操作系统 2022-09-26
Windows Server 2012 如何实现多个用户远程桌面登陆

【温故知新】ssh快捷方式 & vim使用教程

Linux命令行快捷方式 操作命令 操作命令说明 ctrl+a 快速移动光标到行首 ctrl+e 快速移动光标到行尾 ctrl+←/→ 将光标按照单词进行移动 ctrl+k 将光标之后的内容进行全部删除(剪切) ctrl+u 将光标之前的内容进行全部删除(剪切) ctrl+y 将剪切或复制的内容进行粘贴 ctrl+w 将光标之前的字符串进行删除(剪切) ctrl+c 可以终止程序运行过程 ctrl…

CentOS 2023-07-22
【温故知新】ssh快捷方式 & vim使用教程

【温故知新】Linux重要文件介绍

ifcfg-eth0 路径信息:/etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet --- 设置网络类型BOOTPROTO=none --- 是否自动获取IP地址none/static --- IP地址需要手工设置dhcp --- IP地址需要自动获取DEFROUTE=yes --- 是否激活静态默认路由条目 如果没有静态目录路由等价于禁…

CentOS 2023-07-31
【温故知新】Linux重要文件介绍
回到顶部