diff --git "a/09 \345\256\230\346\226\207\350\257\232/20240618 \345\221\250\346\234\237\344\273\273\345\212\241.md" "b/09 \345\256\230\346\226\207\350\257\232/20240618 \345\221\250\346\234\237\344\273\273\345\212\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..281555f9aa8f44f189f0372595b4c5acc11d8ba2 --- /dev/null +++ "b/09 \345\256\230\346\226\207\350\257\232/20240618 \345\221\250\346\234\237\344\273\273\345\212\241.md" @@ -0,0 +1,301 @@ +### 周期任务练习 + +执行在家目录touch a.txt + +1. 每天3:00执行一次 + + ~~~bash + 00 3 * * * echo 111 >> /home/guan/a.txt + ~~~ + + + +2. 每周六2:00执行 + + ~~~bash + 00 2 * * * 5 echo 111 >> /home/guan/a.txt + ~~~ + + + +3. 每周六1:05执行 + + ~~~bash + 5 1 * * 5 echo 111 >> /home/guan/a.txt + ~~~ + + + + + +4. 每周六1:25执行 + + ~~~ bash + 25 1 * * 5 echo 111 >> /home/guan/a.txt + ~~~ + + + +5. 每天8:40执行 + + ~~~bash + 40 8 * * * echo 111 >> /home/guan/a.txt + ~~~ + + + +6. 每天3:50执行 + + ~~~bash + 50 3 * * * echo 111 >> /home/guan/a.txt + ~~~ + + + +7. 每周一到周五的3:40执行 + + ~~~bash + 40 3 * * 1-5 echo 111 >> /home/guan/a.txt + ~~~ + + + +8. 每周一到周五的3:41开始,每10分钟执行一次 + + ~~~bash + 41/10 3 * * 1-5 echo 111 >> /home/guan/a.txt + ~~~ + + + +9. 每天的10:31开始,每2小时执行一次 + + ~~~bash + 31 10/2 * * * echo 111 >> /home/guan/a.txt + ~~~ + + + +10. 每周一到周三的9:30执行一次 + + ~~~bash + 30 9 * * 1-3 echo 111 >> /home/guan/a.txt + ~~~ + + + +11. 每周一到周五的8:00,每周一到周五的9:00执行一次 + + ~~~bash + 00 8 * * 1-5 echo 111 >> /home/guan/a.txt + 00 9 * * 1-5 echo 111 >> /home/guan/a.txt + ~~~ + + + +12. 每天的23:45分执行一次 + + ~~~ bash + 45 23 * * * echo 111 >> /home/guan/a.txt + ~~~ + + + +13. 每周三的23:45分执行一次 + + ~~~bash + 45 23 * * 3 echo 111 >> /home/guan/a.txt + ~~~ + + + +14. 每周一到周五的9:25到11:35、13:00到15:00之间,每隔10分钟执行一次 + + ~~~bash + 25-59/10 9 * * 1-5 echo 111 >> /home/guan/a.txt + */10 10 * * 1-5 echo 111 >> /home/guan/a.txt + 00-35/10 11 * * 1-5 echo 111 >> /home/guan/a.txt + + 00-59/10 13-15 * * 1-5 echo 111 >> /home/guan/a.txt + ~~~ + + + +15. 每周一到周五的8:30、8:50、9:30、10:00、10:30、11:00、11:30、13:30、14:00、14:30、5:00分别执行一次 + + ~~~bash + 30,50 8 * * 1-5 echo 111 >> /home/guan/a.txt + 30 9 * * 1-5 echo 111 >> /home/guan/a.txt + 00,30 10-14 * * 1-5 echo 111 >> /home/guan/a.txt + ~~~ + + + +16. 每天16:00、10:00执行一次 + + ~~~bash + 00 10,16 * * * echo 111 >> /home/guan/a.txt + ~~~ + + + +17. 每天8:10、16:00、21:00分别执行一次 + + ~~~bash + 10 8 * * * echo 111 >> /home/guan/a.txt + 00 16,21 * * * echo 111 >> /home/guan/a.txt + ~~~ + + + +18. 每天7:47、8:00分别执行一次 + +~~~bash +47 7 * * * echo 111 >> /home/guan/a.txt +00 8 * * * echo 111 >> /home/guan/a.txt +~~~ + + + +### 笔记 + +## Cron的配置文件 + +在Debian系统中,Cron任务的配置文件通常分为以下几类: + +1. **用户级Cron任务**:每个用户都有自己的Cron任务配置文件,位于`/var/spool/cron/crontabs/username`。 +2. **系统级Cron任务**:系统级的Cron任务配置文件位于`/etc/crontab`和`/etc/cron.d/`目录下。 +3. **周期性任务目录**:这些目录包含在特定时间间隔运行的脚本,例如: + - `/etc/cron.hourly/` + - `/etc/cron.daily/` + - `/etc/cron.weekly/` + - `/etc/cron.monthly/` + +## 3. 编辑Cron任务 + +### 3.1 使用`crontab`命令 + +用户可以使用`crontab`命令来编辑、查看或删除自己的Cron任务【用户级】。 + +cron table 时间周期表,计划任务表 + +- **编辑Cron任务**: + + ```sh + crontab -e # edit + ``` + + 这将打开用户的Cron配置文件进行编辑。 + +- **查看Cron任务**: + + ```sh + crontab -l # list + ``` + + 这将列出用户当前的Cron任务。 + +- **删除Cron任务**: + + ```sh + crontab -r # remove + ``` + + 这将删除用户的所有Cron任务。 + + ### 3.4 特殊符号 + + **常用的如下:** + + 1. **星号(`*`)** + + - **含义**:匹配任何值,,即每一。 + - **示例**:在分钟字段中使用 `*` 表示每一分钟都运行一次任务。 + + ```sh + * * * * * /path/to/command + ``` + + 2. **逗号(`,`)** + + - **含义**:指定一个列表值,列出所有指定值 a,b,c。 + - **示例**:在小时字段中使用 `0,6,12,18` 表示任务将在每天的0点、6点、12点和18点运行。 + + ```sh + 0 0,6,12,18 * * * /path/to/command + ``` + + 3. **短横线(`-`)** + + - **含义**:指定一个范围值,开始-结尾。 + - **示例**:在日期字段中使用 `1-5` 表示任务将在每个月的1号到5号之间运行。 + + ```sh + 0 0 1-5 * * /path/to/command + ``` + + 4. **斜杠(`/`)** + + - **含义**:指定步长值,即间隔。 + - **示例**:在分钟字段中使用 `*/15` 表示任务每15分钟运行一次。 + + ```sh + */15 * * * * /path/to/command + ``` + + 5. **L(Last)** + + - **含义**:表示最后一个。可以在月的天数或星期几中使用。 + - **示例**:在日期字段中使用 `L` 表示每个月的最后一天。 + + ```sh + 0 0 L * * /path/to/command + ``` + + - **示例**:在星期几字段中使用 `5L` 表示每个月的最后一个星期五。 + + ```sh + 0 0 * * 5L /path/to/command + ``` + + 1. **全局配置文件**:`/etc/crontab` 是一个全局配置文件,用于定义系统级的定时任务。 + + 2. **文件格式**:与用户级的 `crontab` 文件相比,`/etc/crontab` 多了一个字段,用于指定执行任务的用户。格式如下: + + ``` + m h dom mon dow user command + ``` + + 例如: + + ``` + 30 2 * * * root /usr/local/bin/backup.sh + ``` + + 这行表示每天凌晨2:30以root用户的身份执行 `/usr/local/bin/backup.sh`。 + + **使用场景:** + + - **统一管理系统任务**:适合定义一些系统级的任务,比如系统备份、日志轮替等。 + - **需要不同用户执行的任务**:如果需要在同一文件中定义由不同用户执行的任务,可以使用 `/etc/crontab`。 + + #### **4.1.2** **`/etc/cron.d/`** + + **特点:** + + 1. **目录结构**:`/etc/cron.d/` 目录中可以包含多个文件,每个文件可以定义多个任务。 + + 2. **文件格式**:与 `/etc/crontab` 文件的格式相同,需要包含一个用户字段。格式如下: + + ``` + m h dom mon dow user command + ``` + + 例如,在 `/etc/cron.d/mytasks` 文件中: + + ``` + 0 4 * * * root /usr/local/bin/daily_task.sh + 15 14 1 * * user /usr/local/bin/monthly_report.sh + ``` + +