crond和crontab分别是什么

本文详细介绍了crond和crontab的概念及其在Unix和类Unix系统中的应用。crontab是一个强大的命令,用于设置周期性执行的任务,而crond则是负责执行这些任务的守护进程。文章还探讨了crontab文件的编辑方法、crond服务的操作以及如何创建、列出、编辑和删除crontab文件。

crond:crond的概念和crontab是不可分割的。crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语chronos(χρόνος),原意是时间。而crond正是它的守护进程。
crontab:crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρνο),原意是时间。常,crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。

crontab是什么?

  1. 定时任务软件种类    

at    适合仅执行一次就结束的调度命令,需要启动一个后端的atd服务。
crontab 需要启动一个服务crond才行,crond服务通过crontab命令实现
anacron 无法周期性执行,只能以天为周期,但有个特点,在关机状态下未>执行的任务,下次开机时可以补上执行

**注:**crontab为最常用的定时任务。
2. crontab工作
  运行Linux后,开机自启动crond任务,系统会每分钟检查是否有要执行的任务工作(循环检测)默认系统中可以登陆的用户,都可以使用crontab定义计划任务。不过,可以通过/etc/cron.allow文件限制权限。
  
3. crontab支持两种状态:
  a.直接编写计划任务;
  b.使用目录的方式,放在目录里面的都会定时执行,定时目录可在/etc/crontab中设定。
  crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

  Linux下的任务调度分为两类,系统任务调度和用户任务调度。

  系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。
  /etc/crontab文件包括下面几行: 这里写图片描述
  前四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪个shell,这里是bash,第二行PATH变量指定了系统执行命令的路径,第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户,第四行的HOME变量指定了在执行命令或者脚本时使用的主目录
  用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。
crond服务

服务操作说明:

  1. /sbin/service crond start //启动服务
  2. /sbin/service crond stop //关闭服务
  3. /sbin/service crond restart //重启服务
  4. /sbin/service crond reload //重新载入配置

crontab命令详解

命令格式:

  • crontab [-u user] file
  • crontab [-u user] [ -e | -l | -r ]

命令功能:

  通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常设合周期性的日志分析或数据备份等工作。

命令参数:

  -u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。

  file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。

  -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。

  -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。

  -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。

  -i:在删除用户的crontab文件时给确认提示。

常用方法:

1). 创建一个新的crontab文件

  在考虑向cron进程提交一个crontab文件之前,首先要做的一件事情就是设置环境变量EDITOR。cron进程根据它来确定使用哪个编辑器编辑crontab文件。9 9 %的UNIX和LINUX用户都使用vi,如果你也是这样,那么你就编辑$ HOME目录下的. profile文件,在其中加入这样一行:

EDITOR=vi; export EDITOR

  然后保存并退出。不妨创建一个名为 cron的文件,其中是用户名,例如, davecron。在该文件中加入如下的内容。

# (put your own initials here)echo the date to the console every

# 15minutes between 6pm and 6am

0,15,30,45 18-06 * * * /bin/echo ‘date’ > /dev/console
保存并退出。确信前面5个域用空格分隔。

  在上面的例子中,系统将每隔1 5分钟向控制台输出一次当前时间。如果系统崩溃或挂起,从最后所显示的时间就可以一眼看出系统是什么时间停止工作的。在有些系统中,用tty1来表示控制台,可以根据实际情况对上面的例子进行相应的修改。为了提交你刚刚创建的crontab文件,可以把这个新创建的文件作为cron命令的参数:

$ crontab davecron
  现在该文件已经提交给cron进程,它将每隔1 5分钟运行一次。

  同时,新创建文件的一个副本已经被放在/var/spool/cron目录中,文件名就是用户名(即dave)。

 2). 列出crontab文件

   为了列出crontab文件,可以用:

$ crontab -l

0,15,30,45,18-06 * * * /bin/echo date > dev/tty1
  你将会看到和上面类似的内容。可以使用这种方法在$ H O M E目录中对crontab文件做一备份:

crontabl> HOME/mycron
  这样,一旦不小心误删了crontab文件,可以用上一节所讲述的方法迅速恢复。

3). 编辑crontab文件

  如果希望添加、删除或编辑crontab文件中的条目,而E D I TO R环境变量又设置为v i,那么就可以用v i来编辑crontab文件,相应的命令为:

$ crontab -e
  可以像使用v i编辑其他任何文件那样修改crontab文件并退出。如果修改了某些条目或添加了新的条目,那么在保存该文件时, c r o n会对其进行必要的完整性检查。如果其中的某个域出现了超出允许范围的值,它会提示你。

  我们在编辑crontab文件时,没准会加入新的条目。例如,加入下面的一条:

# DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month

 30 3 1,7,14,21,26 * * /bin/find -name "core' -exec rm {} \;

  现在保存并退出。最好在crontab文件的每一个条目之上加入一条注释,这样就可以知道它的功能、运行时间,更为重要的是,知道这是哪位用户的作业。

  现在让我们使用前面讲过的crontab -l命令列出它的全部信息:

$ crontab -l 

# (crondave installed on Tue May 4 13:07:43 1999)

# DT:ech the date to the console every 30 minites

0,15,30,45 18-06 * * * /bin/echo date > /dev/tty1

# DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month

30 3 1,7,14,21,26 * * /bin/find -name "core' -exec rm {} \;

4). 删除crontab文件

  要删除crontab文件,可以用:

$ crontab -r
5). 恢复丢失的crontab文件

  如果不小心误删了crontab文件,假设你在自己的$ H O M E目录下还有一个备份,那么可以将其拷贝到/var/spool/cron/,其中是用户名。如果由于权限问题无法完成拷贝,可以用:

crontab H O M E目录中副本的文件名。

  我建议你在自己的$ H O M E目录中保存一个该文件的副本。我就有过类似的经历,有数次误删了crontab文件(因为r键紧挨在e键的右边)。这就是为什么有些系统文档建议不要直接编辑crontab文件,而是编辑该文件的一个副本,然后重新提交新的文件。

  有些crontab的变体有些怪异,所以在使用crontab命令时要格外小心。如果遗漏了任何选项,crontab可能会打开一个空文件,或者看起来像是个空文件。这时敲delete键退出,不要按,否则你将丢失crontab文件。
参考文件:
crond和crontab详解

<think>好的,我现在需要回答用户关于Linux系统中crontabcrond配置文件路径的问题。用户之前已经问过相关问题,我也给出了详细回答,现在用户再次明确询问这两个的配置文件位置,需要结合提供的引用内容来调整回答。 首先,确认用户的问题:用户想知道crontabcrond的配置文件路径。根据引用,crontab的配置文件分为用户级系统级,而crond作为守护进程,可能涉及多个配置文件,比如/etc/crontab、/etc/cron.d/等。需要区分crontab工具crond服务各自的配置位置。 根据引用[1],用户级的crontab文件存放在/var/spool/cron/目录下,每个用户一个文件,如root用户的文件是/var/spool/cron/root。而系统级的配置文件在/etc/crontab/etc/cron.d/目录下。引用[4]提到crond会检查这些文件的变化,无需重启服务。 引用[2]展示了/etc/crontab的结构,包含环境变量系统级任务。引用[5]提到访问控制文件/etc/cron.allow/etc/cron.deny,这需要包含在回答中。此外,日志文件的位置在/var/log/cron(RedHat系)或/var/log/syslog(Debian系),引用[3]提到了这一点。 需要确保回答结构清晰,分点说明用户级系统级的路径,同时提到相关配置文件如cron.allowcron.deny。另外,用户可能混淆crontab(命令用户配置文件)与crond(服务及其相关系统配置文件),需要明确区分。 可能还需要指出,crond本身没有单独的配置文件,而是通过读取上述多个文件目录来执行任务。因此,在回答中应明确说明crond依赖的这些配置文件的位置。 最后,检查是否有遗漏的引用内容,比如引用[4]提到crond每分钟检查的路径,包括/etc/crontab、/etc/cron.d//var/spool/cron,这些都要在回答中涵盖。同时,用户之前的问题涉及到调试日志,因此在回答中可以简要提到日志路径,但用户本次问题主要关注配置文件位置,所以日志部分可以作为补充信息。 总结回答结构: 1. Crontab的配置文件路径: - 用户级:/var/spool/cron/<用户名> - 系统级:/etc/crontab、/etc/cron.d/*、/etc/cron.*/目录 2. Crond相关配置文件: - 访问控制:/etc/cron.allow/etc/cron.deny - 环境变量设置:在/etc/crontab中定义(如SHELL, PATH等) 3. 注意事项:编辑用户级配置文件必须使用crontab -e,直接修改可能出错。 确保引用正确,例如用户级的路径参考引用[1][4],系统级参考引用[2][4],访问控制文件参考引用[5]。</think>##### **Linux系统中crontabcrond配置文件路径详解** 在Linux系统中,**crontab**(用户任务配置文件)**crond**(定时任务守护进程)的配置文件路径如下: --- ### **一、crontab配置文件路径** #### **1. 用户级配置文件** - **路径**:`/var/spool/cron/<用户名>` - 每个用户独立存储,例如: - root用户:`/var/spool/cron/root` - 普通用户test:`/var/spool/cron/test` - **编辑方式**:必须通过`crontab -e`命令修改,直接编辑可能引发格式错误或权限问题[^1][^4]。 #### **2. 系统级配置文件** - **主配置文件**:`/etc/crontab` - **格式**:需指定执行用户(如`root`): ```bash * * * * * root /path/to/command ``` - **环境变量**:该文件通常包含全局环境设置(如`PATH`、`MAILTO`等),示例内容如下[^2]: ```bash SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root ``` - **扩展目录**: - `/etc/cron.d/`:存放第三方应用的独立定时任务文件(每文件需符合cron格式)[^4]。 - 周期任务目录: - `/etc/cron.hourly/`:每小时执行 - `/etc/cron.daily/`:每天执行 - `/etc/cron.weekly/`:每周执行 - `/etc/cron.monthly/`:每月执行 --- ### **二、crond相关配置文件** #### **1. 服务控制文件** - **访问权限控制**: - `/etc/cron.allow`:允许使用`crontab`命令的用户白名单。 - `/etc/cron.deny`:禁止使用`crontab`命令的用户黑名单。 - 若两者均不存在,默认允许所有用户[^5]。 #### **2. 日志文件** - **路径**: - RedHat/CentOS:`/var/log/cron` - Debian/Ubuntu:`/var/log/syslog`(需通过`grep CRON`过滤日志)[^3]。 --- ### **三、关键机制说明** 1. **crond的配置文件加载** crond每分钟自动检查以下位置的变动: - `/etc/crontab` - `/etc/cron.d/`目录 - `/var/spool/cron/`目录下的用户文件 修改后无需重启服务即可生效。 2. **用户级与系统级任务的区别** - **用户级任务**:通过`crontab -e`配置,无需指定执行用户。 - **系统级任务**:需在`/etc/crontab`或`/etc/cron.d/`文件中明确指定执行用户[^1][^2]。 --- ##### **相关问题** 1. 如何通过`/etc/cron.deny`禁止普通用户创建定时任务? 2. 系统级定时任务中`run-parts`命令的作用是什么? 3. 如何避免crontab任务因环境变量缺失导致执行失败? 4. 在`/etc/cron.d/`目录中添加任务文件时需要注意哪些格式规范? [^1]: 用户级crontab文件必须通过`crontab -e`编辑,直接修改`/var/spool/cron/`下的文件可能导致语法错误或权限冲突。 [^2]: `/etc/crontab`中需指定执行用户,且支持全局环境变量配置(如`PATH`、`MAILTO`),适用于系统级任务[^2]。 [^3]: cron日志路径因Linux发行版而异,CentOS系统可通过`/var/log/cron`追踪任务执行情况[^3]。 [^4]: crond服务每分钟自动加载配置文件变更,无需手动重启即可生效[^4]。 [^5]: 通过`/etc/cron.allow``/etc/cron.deny`可灵活控制用户权限,若均不存在则默认允许所有用户使用crontab[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值