crontab和crond分析

简介: 目录 目录 1 1. 研究目的 1 2. 基本概念 1 3. crontab 1 3.1. 编辑 2 3.1.1. “crontab -e”工作流 2 3.2. 问题 3 4. crond 3 4.1. /etc/crontab 3 1. 研究目的 更好使用crontab,和解决crontab使用问题。

目录

目录 1

1. 研究目的 1

2. 基本概念 1

3. crontab 1

3.1. 编辑 2

3.1.1. “crontab -e”工作流 2

3.2. 问题 3

4. crond 3

4.1. /etc/crontab 3


1. 研究目的

更好使用crontab,和解决crontab使用问题。本文分析的是Paul Vixie版本crontabcrond。一般可通过执行“man crontab”查看AUTHOR是不是“Paul Vixie”。

2. 基本概念

1) crond是一个后台守护程序,定时执行由它负责;

2) crontabcrond的命令行工具,通过它来增删改定时任务,不同用户的crontab是独立分开的。

3. crontab

crontab启动后,会首先切换当前目录,当前目录由宏CRONDIR定义(pathnames.h中):

#ifndef CRONDIR

/* CRONDIR is where cron(8) and crontab(1) both chdir

 * to; SPOOL_DIR, CRON_ALLOW, CRON_DENY, and LOG_FILE

 * are all relative to this directory.

 */

#define CRONDIR "/var/cron"

#endif


老版本一般为/var/cron,新版本目录为:/var/spool。

接下来会检查用户是否有权限执行crontab,比如用户名密码过期了则不能执行。检查通过后根据命令行参数分成4个命名分别执行:

1) list_cmd:对应于crontab -l

2) delete_cmd:对应于crontab -r

3) edit_cmd:对应于crontab -e

4) replace_cmd:对应于crontab filepath

3.1. 编辑

crontab默认使用宏_PATH_VI指定的编程器,文件/usr/include/paths.h定义了_PATH_VI:

#define    _PATH_VI        "/usr/bin/vi"


但如果系统没有文件/usr/include/paths.h或没有定义_PATH_VI,则为/usr/ucb/vi

#if defined(_PATH_VI)

# define EDITOR _PATH_VI

#else

# define EDITOR "/usr/ucb/vi"

#endif


除此外,crontab还支持从环境变量VISUAL和EDITOR读取采用哪个编辑器,其中先读取VISUAL,如果没有指定再读取EDITOR

crontab -e”的完整工作流如下:

3.1.1. “crontab -e”工作流

以用户root为例:

1) 切换当前目录为“/var/cron”;

2) 拼写文件名“tabs/username”,假设用户名为root,则为“tabs/root(新版本文件为:cron/root)”,完整的路径为:/var/cron/tabs/root。文件tabs/root的内容和命令“crontab -l”的输出相同;

3) 打开文件/var/cron/tabs/root,然后取得文件的访问时间和修改时间。如果文件不存在,则读取/dev/null的访问时间和修改时间;

4) 生成格式为“crontab.XXXXXXXXXX”的临时文件,比如:crontab.b2gvnE

5) 修改临时文件的owner;

6) 将文件tabs/root的内容逐字符复制到临时文件中;

7) 取得编辑用的编辑器,默认为“/usr/bin/vi”;

8) fork一个子进程;

9) 通过execlp执行/usr/bin/vi;

10) 等待vi进程退出;

11) 如果vi正常退出,检查修改时间,如果有变化,则执行replace_cmd

12) replace_cmd过程上,会加上头:

/* write a signature at the top of the file.

 *

 * VERY IMPORTANT: make sure NHEADER_LINES agrees with this code.

 */

fprintf(tmp, "# DO NOT EDIT THIS FILE - edit the master and reinstall.\n");

fprintf(tmp, "# (%s installed on %-24.24s)\n", Filename, ctime(&now));

fprintf(tmp, "# (Cron version %s -- %s)\n", CRON_VERSION, rcsid);


13) replace_cmd会创建一个新的位于当前目录(比如/var/cron或/var/spool)下的临时文件;

14) 然后复制原来的临时文件内容到瓣的临时文件中,并检查语法;

15) 完成再调用rename将临时文件名改为第2步取得的正式文件名;

16) 更新文件的访问时间和修改时间。

3.2. 问题

1) “crontab -e”未退出前的修改但已保存是否生效?

2) crontab中定义的环境变量,注释是否可以在同一行,如:

STARTDATE=2017-12-18 # 开始日期

4. crond

老版本的crond,修改改需要重启进程才会生效,新版本crond通过inotify监控文件变化,修改后不用重启即会生效。

4.1. /etc/crontab

系统crontab文件,在加载用户crontab前会先加载/etc/crontab,而且/etc/crontab总是属性root用户。


有关crontab更多,请浏览《cron运行原理》:http://blog.chinaunix.net/uid-20682147-id-4977039.html


Crontab专题:http://blog.chinaunix.net/uid/20682147/cid-224920-list-1.html

相关文章
色相、明度及饱和度
(色彩)色相、明度及饱和度 2014-09-02  大东村人                                             在刚开始拍照时,很多初学者像幼儿一样,常会被鲜艳的颜色所吸引,但摄影上的色彩,真的只是把对比度拉高,饱和度调到最高点,这么简单而已吗?下面的内容将探讨色相、明度及饱合度在摄影上的运用。
1402 0
|
5天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
15天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
614 216
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
857 61
|
7天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1287 157
|
5天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
241 138
|
7天前
|
存储 安全 固态存储
四款WIN PE工具,都可以实现U盘安装教程
Windows PE是基于NT内核的轻量系统,用于系统安装、分区管理及故障修复。本文推荐多款PE制作工具,支持U盘启动,兼容UEFI/Legacy模式,具备备份还原、驱动识别等功能,操作简便,适合新旧电脑维护使用。
531 109