作者:浪漫的没天份 | 来源:互联网 | 2024-11-13 13:40
### 一. 关于 crond
1. **crond 的作用**
`crond` 是 Linux 系统中用于定期执行程序的守护进程。在操作系统安装完成后,默认情况下会启动此任务调度服务。`crond` 每分钟都会检查是否有需要执行的任务,并自动执行这些任务。Linux 中的任务调度主要分为以下两类:
- **系统执行的工作**:系统周期性需要执行的任务,如备份系统数据、清理缓存等。
- **个人执行的工作**:用户定期需要执行的任务,如每隔10分钟检查邮件服务器是否有新邮件,这些任务可以由每个用户自行设置。
2. **服务的启动和停止**
`cron` 服务是 Linux 的内置服务,但默认不会开机自动启动。可以使用以下命令来启动和停止服务:
| 命令 | 描述 |
| --- | --- |
| `/sbin/service crond start` | 启动服务 |
| `/sbin/service crond stop` | 停止服务 |
| `/sbin/service crond restart` | 重启服务 |
| `/sbin/service crond reload` | 重新加载配置 |
要将 `cron` 设置为开机自动启动,可以在 `/etc/rc.d/rc.local` 脚本中加入 `/sbin/service crond start`。
### 二. 关于 crontab
`crontab` 是一个用于在 Unix/Linux 系统上定时执行任务的工具。通过 `cron` 服务,用户可以使用 `crontab` 命令添加或编辑需要定时执行的任务。使用 `service crond status` 命令可以查看 `cron` 服务的状态,如果未启动,可以使用 `service crond start` 命令启动。
| 命令 | 描述 |
| --- | --- |
| `crontab -l` | 查看当前用户的 cron 配置 |
| `crontab -e` | 编辑当前用户的 cron 配置 |
| `crontab -r` | 删除当前用户的 cron 配置 |
| `crontab -u` | 设定某个用户的 cron 服务,通常 root 用户在执行此命令时需要此参数 |
| `crontab -u root -l` | root 查看自己的 cron 设置 |
| `crontab -u fred -r` | root 删除 fred 的 cron 设置 |
| `crontab -u root -e` | 编辑 root 用户的 cron 服务,编辑内容需遵循特定格式 |
| `crontab -l` | 列出当前的 crontab 任务 |
| `crontab -d` | 删除当前的 crontab 任务 |
| `crontab -e` | 编辑一个 crontab 任务,Ctrl+D 结束 |
| `crontab filename` | 以 filename 作为 crontab 的任务列表文件并载入 |
#### 示例
以下是两个 cron 任务的例子(在 `/etc/crontab` 文件中):
- `12 3 * * * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&1` // 用于晚间备份 /etc 目录
- `52 5 * * * root /usr/local/src/analog-5.32-lh/analog >> /dev/null 2>&1` // 运行 Analog 程序处理服务器的统计信息
#### 字段说明
| 字段 | 1 | 2 | 3 | 4 | 5 | 6 |
| --- | --- | --- | --- | --- | --- | --- |
| 说明 | 分钟(0-59) | 小时(0-23) | 日期(1-31) | 月份(1-12;或英文缩写 Jan、Feb 等) | 星期几(0-6,0 为周日;或单词缩写 Sun、Mon 等) | 用户名(执行命令时以此用户的身份) |
第 6 个字段是一个要在适当时间执行的命令字符串。
- 示例:
```
# MIN HOUR DAY MONTH DAYOFWEEK COMMAND
# 每天早上 6 点 10 分
10 6 * * * date
# 每两个小时
0 */2 * * * date (Solaris 5.8 似乎不支持此种写法)
# 晚上 11 点到早上 8 点之间每两个小时,早上 8 点
0 23-7/2,8 * * * date
# 每个月的 4 号和每个星期的星期一到星期三的早上 11 点
0 11 4 * mon-wed date
# 1 月份每天早上 4 点
0 4 1 jan * date
```
### 三. 测试代码
1. **启动 crond**
```bash
/sbin/service crond start // 若提示没有权限可加上 sudo
```
2. **查看当前用户的 cron 配置并编辑**
```bash
crontab -l
crontab -e
// 然后输入以下命令
* * * * * ~/run.sh // 每隔一分钟向 shell 发一封邮件
```
输入 `crontab -l` 命令,每隔一分钟输入一次,则会出现以下现象:
![结果图](https://www.example.com/image1.png)
3. **删除当前用户的 cron 配置**
![结果图](https://www.example.com/image2.png)
![结果图](https://www.example.com/image3.png)