4-13-1 Linux中的计划作业 --- crontab(二
- 4-13 记录了用 crontab 命令创建计划任务。这节 4-13-1 记录用 /etc/crontab 配置文件创建计划任务。
- 学习 /etc/crontab 配置文件创建计划任务。
- 一、/etc/crontab 配置文件的内容。
[root@localhost ~]# vim /etc/crontab ## vim 编辑 /etc/crontab 文件
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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 ## <---- 命令格式模板
~
~
-
有 3 个变量,分别是:SHELL=/bin/bash、PATH=/sbin:/bin:/usr/sbin:/usr/bin、MAILTO=root
-
①、SHELL=/bin/bash:系统使用的 SHELL,也就是系统使用的操作界面。
-
②、PATH=/sbin:/bin:/usr/sbin:/usr/bin:环境变量,/etc/crontab 文件可执行命令的范围。/etc/crontab 文件执行的命令都是从这几个路径中调用。如果命令不在这些环境当中,crontab 计划任务将不会执行。如自己编写的脚本不在环境变量当中,可把脚本的父路径添加到 PATH 当中,也可以在编辑 crontab 任务时写上脚本的全路径再执行。
-
③、MAILTO=root:发送邮件到给 root 用户。当 /etc/crontab 文件中的命令发生错误时,邮件会发送到 root。可以将这个 mail 改成外置帐号。
-
④、文档中最后一行是命令格式模板:* * * * * user-name command to be executed
-
二 、 /etc/crontab 文档的权限是 -rw-r--r-- ,正常情况下不要修改权限。必须用 root 的身份编辑这个文件。
/etc/crontab 文档的权限
- 三、/etc/crontab 文件制定计划任务实例:
- ①、制定 root 用户每分钟输出 date 到 mydate.txt 文件。
- vim 编辑 /etc/crontab,输入 * * * * * root date >> mydate.txt,wq! 保存文件。
[root@localhost ~]#
[root@localhost ~]# vim /etc/crontab vim 编辑 /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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
* * * * * root date >> mydate.txt ## <---- 输入的内容
~
~
~
:wq
* * * * * root date >> mydate.txt 命令图解
- 等待一段时间后 ll 查看 root 目录已有 mydate.txt 文件。cat 可以查看到 dete 每一分钟输出的数据
[root@localhost ~]# ll
total 4
-rw-r--r--. 1 root root 522 Oct 8 13:30 mydate.txt
[root@localhost ~]#
[root@localhost ~]# cat mydate.txt
Fri Oct 8 13:13:01 CST 2021
Fri Oct 8 13:14:01 CST 2021
Fri Oct 8 13:15:02 CST 2021
Fri Oct 8 13:16:01 CST 2021
Fri Oct 8 13:17:01 CST 2021
Fri Oct 8 13:18:01 CST 2021
Fri Oct 8 13:19:01 CST 2021
Fri Oct 8 13:20:01 CST 2021
Fri Oct 8 13:21:01 CST 2021
Fri Oct 8 13:22:01 CST 2021
Fri Oct 8 13:23:01 CST 2021
Fri Oct 8 13:24:01 CST 2021
Fri Oct 8 13:25:01 CST 2021
Fri Oct 8 13:26:01 CST 2021
Fri Oct 8 13:27:01 CST 2021
Fri Oct 8 13:28:01 CST 2021
Fri Oct 8 13:29:01 CST 2021
Fri Oct 8 13:30:01 CST 2021
[root@localhost ~]#
## crontab -l 查看不到 /etc/cronta 配置文件制定的 crontab 计划任务
[root@localhost ~]# crontab -l
no crontab for root
[root@localhost ~]#
- 值得留意的是 /etc/cronta 配置文件制定的计划任务,用 crontab -l 查看不到制定的内容。 /etc/cronta 配置文件 和 crontab 命令不是同一模式的制定方式。
- ②、制定 torres 普通用户每 5 分钟在自家目录下创建一个 root-directory 目录。
[root@localhost ~]#
[root@localhost ~]# vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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
* * * * * root date >> mydate.txt
*/5 * * * * torres touch root-directory ## <---- 输入的内容
~
~
~
~
:wq
- torres 用户每隔 5 分钟生成一个 root-directory,由于同名目录所以每生成一次,时间会更新一次。
[torres@localhost ~]$ ll
total 0
-rw-r--r--. 1 torres torres 0 Oct 8 15:15 root-directory
[torres@localhost ~]$ ll
total 0
-rw-r--r--. 1 torres torres 0 Oct 8 15:20 root-directory
[torres@localhost ~]$ ll
total 0
-rw-r--r--. 1 torres torres 0 Oct 8 15:25 root-directory
[torres@localhost ~]$ ll
total 0
-rw-r--r--. 1 torres torres 0 Oct 8 15:30 root-directory
[torres@localhost ~]$
③、用脚本形式制定 user1 普通用户每 2 分钟输出一次 date 到 user1date.txt 文件。
- vim 编辑脚本文件 user1.txt。输入 date >> user1date.txt。
[root@localhost ~]#
[root@localhost ~]# vim user1.sh ## vim 编辑 user1.sh 脚本
date >> user1date.txt ## 脚本内容:输出 date 到 user1date.txt 文件
~
~
~
:wq!
[root@localhost ~]# ll
total 4
-rw-r--r--. 1 root root 22 Oct 11 16:25 user1.sh ## 脚本文件
[root@localhost ~]#
- 新建出来的 user1.sh 脚本文件没有 x 执行权限。需要赋予 x 执行权限。755,拥有者具有对文件的可读、可写、可执行三种权限,所属组 和 其他人具有可读、可执行的权限。
[root@localhost ~]#
[root@localhost ~]# ll
total 4
-rw-r--r--. 1 root root 22 Oct 11 16:25 user1.sh
[root@localhost ~]#
[root@localhost ~]# chmod 755 user1.sh
[root@localhost ~]#
[root@localhost ~]# ll
total 4
-rwxr-xr-x. 1 root root 22 Oct 11 16:25 user1.sh # 拥有者、所属组、其他人都具有可执行权限
[root@localhost ~]#
- vim 编辑 /etc/crontab 文件。输入 */2 * * * * user1 /root/user1.sh。值得注意的是,user1 调用 user1.sh 脚本文件时,需要把全路径写上。因为 PATH=/sbin:/bin:/usr/sbin:/usr/bin 环境变量没有配置自定义脚本的路径,如果不写上全路径,程序会找不到可执行的脚本文件而导致调用失败。
[root@localhost ~]#
[root@localhost ~]# vim /etc/crontab ## vim 编辑 /etc/crontab 文件
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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 * * * * user1 /root/user1.sh ## user1 用户每两分钟调用一次 root 的 user1.sh 脚本
~
~
~
:wq! ## 保存并退出
- 等待一段时间, user1 用户下并没有出现 user1date.txt 文件。
user1@localhost ~]$
[user1@localhost ~]$ ll ## user1 家目录没有文件
total 0
[user1@localhost ~]$
- 切换到 root 目录查看原因,随意输入内容就会弹出一句 You have new mail in /var/spool/mail/root 。这种情况一般是 /etc/crontab 内的指令发生错误时,会将错误信息发送到 /var/spool/mail/root。它会根据指令设定的执行时限作为反馈,也就是指令每分钟执行一次脚本,那么只要有错误时,每分钟执行完指令都会反馈一次 You have new mail in /var/spool/mail/root 。
## 每分钟按 enter 回车键都会收到提示信息
[root@localhost ~]#
You have new mail in /var/spool/mail/root
[root@localhost ~]#
You have new mail in /var/spool/mail/root
[root@localhost ~]#
You have new mail in /var/spool/mail/root
[root@localhost ~]#
- tail 查看 /var/spool/mail/root 最后 10 行信息。得到 /bin/bash: /root/usr1.sh: Permission denied 没有访问 /root/user1.sh 的权限。
[root@localhost ~]#
[root@localhost ~]# tail /var/spool/mail/root
X-Cron-Env: <PATH=/sbin:/bin:/usr/sbin:/usr/bin>
X-Cron-Env: <MAILTO=root>
X-Cron-Env: <HOME=/home/user1>
X-Cron-Env: <LOGNAME=user1>
X-Cron-Env: <USER=user1>
Message-Id: <20211011090001.97AD860EC912@localhost.localdomain>
Date: Mon, 11 Oct 2021 17:00:01 +0800 (CST)
/bin/bash: /root/user1.sh: Permission denied ## 没有 /root/user1.sh 权限
[root@localhost ~]#
- 虽然 user1.sh 已经设置了权限为其他人有 x 可执行权限。但它的路径是在 root 目录下。root 目录的权限是 dr-xr-x---,对于其他人没有任何权限。所以当 user1 用户调用 /root/user1.sh 会提示没有权限。
[root@localhost ~]# ll
total 4
-rwxr-xr-x. 1 root root 22 Oct 11 16:25 user1.sh
[root@localhost ~]# pwd
/root
[root@localhost ~]#
[root@localhost ~]# ll /
total 20
lrwxrwxrwx. 1 root root 7 Mar 22 2021 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Jun 17 09:37 boot
drwxr-xr-x. 3 root root 20 Mar 18 2021 data
drwxr-xr-x. 19 root root 3160 Oct 11 08:32 dev
drwxr-xr-x. 90 root root 8192 Oct 11 17:03 etc
drwxr-xr-x. 2 root root 6 Jun 29 11:22 fdfsd
drwxr-xr-x. 5 root root 42 Oct 11 15:21 home
lrwxrwxrwx. 1 root root 7 Mar 22 2021 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Mar 22 2021 lib64 -> usr/lib64
drwxr-xr-x. 3 root root 19 Apr 2 2021 media
drwxr-xr-x. 5 root root 42 Mar 22 2021 mnt
drwxr-xr-x. 5 root root 45 Jul 23 11:09 opt
dr-xr-xr-x. 151 root root 0 Oct 11 08:31 proc
dr-xr-x---. 3 root root 187 Oct 11 17:03 root ## <---- root 目录的其他人项中没有任何权限
drwxr-xr-x. 25 root root 720 Oct 11 08:32 run
lrwxrwxrwx. 1 root root 8 Mar 22 2021 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 Apr 11 2018 srv
dr-xr-xr-x. 13 root root 0 Oct 11 08:31 sys
drwxr-xr-x. 2 root root 6 Jun 29 11:26 test目录分别创建
drwxr-xr-x. 2 root root 6 Jun 29 11:27 test目录分别创建demo1,demo2,demo3三个文件夹
drwxrwxrwt. 12 root root 4096 Oct 11 17:06 tmp
drwxr-xr-x. 13 root root 155 Mar 22 2021 usr
drwxr-xr-x. 19 root root 267 Mar 22 2021 var
drwxr-xr-x. 2 root root 6 Jun 29 11:22 新建一个test文件夹
[root@localhost ~]#
- 通过 user1 用户访问 root 目录时,得以证实没有权限访问。
[user1@localhost ~]$
[user1@localhost ~]$ ll /root/
ls: cannot open directory /root/: Permission denied
[user1@localhost ~]$
- 把 user1.sh 文件 mv 剪贴到 /home/user1/ 目录下,也就是 user1 的家目录。然后 vim /etc/crontab 修改 user1.sh 的路径。
[root@localhost ~]#
[root@localhost ~]# ll
total 4
-rwxr-xr-x. 1 root root 22 Oct 11 16:25 user1.sh
[root@localhost ~]#
[root@localhost ~]# mv user1.sh /home/user1/ ## 剪贴 user1.sh 到 /home/user1/ 目录下
[root@localhost ~]#
[root@localhost ~]# vim /etc/crontab ## 编辑 /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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 * * * * user1 /home/user1/user1.sh ## 修改 user1.sh 的路径
~
~
~
~
~
:wq ## 保存并退出
- 等待几分钟,user1 用户已经生成了 user1date.txt 文件,通过 cat 查看文件内容是 /etc/crontab 制定的每 2 分钟输出一次 date。
## user1 用户
[user1@localhost ~]$
[user1@localhost ~]$ ll
total 8
-rw-r--r--. 1 user1 user1 29 Oct 11 17:10 user1date.txt
-rwxr-xr-x. 1 root root 22 Oct 11 16:25 user1.sh
[user1@localhost ~]$
[user1@localhost ~]$ cat user1date.txt
Mon Oct 11 17:10:01 CST 2021
Mon Oct 11 17:12:01 CST 2021
[user1@localhost ~]$
- root 用户也可以访问 /home/user1/ 目录下的 user1date.txt 文件。
## root 用户
[root@localhost ~]#
[root@localhost ~]# ll /home/user1/
total 8
-rw-r--r--. 1 user1 user1 58 Oct 11 17:12 user1date.txt
-rwxr-xr-x. 1 root root 22 Oct 11 16:25 user1.sh
[root@localhost ~]#
[root@localhost ~]# cat /home/user1/user1date.txt
Mon Oct 11 17:10:01 CST 2021
Mon Oct 11 17:12:01 CST 2021
[root@localhost ~]#
- 以上例子主要记录了 /etc/crontab 制定命令时,执行的用户指定为普通用户。
④、同样的原理,普通用户编写的脚本文件,root 用户编辑 /etc/crontab 时也可以调用脚本文件。
- user1 用户编写脚本,输出 "i am user1" 到 /home/user1/user1.txt 文件
[user1@localhost ~]$ ll
total 0
[user1@localhost ~]$ vim user1.sh
echo "i am user1" >> /home/user1/user1.txt ## 输入的内容
~
~
~
:wq ## 保存并退出
[user1@localhost ~]$ ll
total 4
-rw-rw-r--. 1 user1 user1 41 Oct 12 11:39 user1.sh ## 生成的 user1.sh 文件
[user1@localhost ~]$
- user1 用户编辑 /etc/crontab 文件,由于权限问题不能保存文件。
[user1@localhost ~]$
[user1@localhost ~]$ vim /etc/crontab ## user1 用户编辑 /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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
* * * * * user1 /home/user1/user1.sh
~
~
~
~
~
"/etc/crontab"
"/etc/crontab" E212: Can't open file for writing ## 保存的时候提示无法打开文件写入,只能 q! 退出
Press ENTER or type command to continue
- /etc/crontab 文件权限 -rw-r--r--,只有 root 用户可以进行读写。
[user1@localhost ~]$
[user1@localhost ~]$ ll /etc/crontab
-rw-r--r--. 1 root root 488 Oct 12 11:46 /etc/crontab ## 除 root 外,其他人没有写 /etc/crontab 的权限
[user1@localhost ~]$
- user1.sh 文件权限 -rw-rw-r--,拥有者、所属组、其他人都没有 x 执行权限。需要拥有者能够有执行权限,chmod u+x 增加拥有者 x 执行权限。文件拥有者为 user1 用户。
[root@localhost ~]# ll /home/user1/
total 4
-rw-rw-r--. 1 user1 user1 41 Oct 12 11:39 user1.sh
[root@localhost ~]#
[root@localhost ~]# chmod u+x /home/user1/user1.sh ## user1.sh 文件拥有者添加 x 执行权限
[root@localhost ~]#
[root@localhost ~]# ll /home/user1/user1.sh
-rwxrw-r--. 1 user1 user1 41 Oct 12 11:39 /home/user1/user1.sh
- root 用户编辑 /etc/crontab 文件。
[root@localhost ~]#
[root@localhost ~]# vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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
* * * * * user1 /home/user1/user1.sh ## 执行用户是 user1,调用 /home/user1/user1.sh 脚本
~
~
~
~
:wq ## 保存并退出
- 稍等一会,user1 用户的家目录已经生成 user1.txt 文件。cat user.txt 也可以看到正确输出。
[user1@localhost ~]$ ll
total 8
-rwxrw-r--. 1 user1 user1 43 Oct 12 13:48 user1.sh
-rw-r--r--. 1 user1 user1 33 Oct 12 13:54 user1.txt
[user1@localhost ~]$
[user1@localhost ~]$ cat user1.txt
i am user1
i am user1
i am user1
[user1@localhost ~]$
- 以上例子主要记录了普通用户编写的脚本文件,需要通过 root 编辑 /etc/crontab 文件进行调用。普通用户没有编辑 /etc/crontab 文件的权限。
⑤、添加脚本的路径到 /etc/crontab 的环境变量,制定执行命令时不需要写全路径。
[root@localhost ~]#
[root@localhost ~]# vim rootdate.sh ## root 用户创建 rootdate.sh 脚本
date >> rootdate.txt ## 内容:输出 date 到 rootdate.txt 文件
~
~
~
:wq ## 保存并退出
[root@localhost ~]#
[root@localhost ~]# vim /etc/crontab ## 编辑 /etc/crontab 文件
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/root/ ## 把脚本文件的父路径写到环境变量中,:/root/
MAILTO=root
# 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
* * * * * root rootdate.sh ## 脚本的父路径已经添加到环境变量,这里只需要写脚本名。
~
~
~
~
~
:wq ## 保存并退出
- 稍等一会,root 的家目录如期生成 rootdate.txt 文件。cat 可以查看到预期每隔一分钟 date 的输出。
[root@localhost ~]#
[root@localhost ~]# ll
total 8
-rwxr--r--. 1 root root 21 Oct 13 08:56 rootdate.sh
-rw-r--r--. 1 root root 319 Oct 13 09:08 rootdate.txt ## 生成的 rootdate.txt
[root@localhost ~]#
[root@localhost ~]# cat rootdate.txt ## rootdate.txt 内容
Wed Oct 13 08:58:01 CST 2021
Wed Oct 13 08:59:01 CST 2021
Wed Oct 13 09:00:01 CST 2021
Wed Oct 13 09:01:01 CST 2021
Wed Oct 13 09:02:01 CST 2021
Wed Oct 13 09:03:02 CST 2021
Wed Oct 13 09:04:01 CST 2021
Wed Oct 13 09:05:01 CST 2021
Wed Oct 13 09:06:01 CST 2021
Wed Oct 13 09:07:01 CST 2021
Wed Oct 13 09:08:01 CST 2021
Wed Oct 13 09:09:01 CST 2021
[root@localhost ~]#
⑥、编辑 /etc/crontab 文件,多用户输出。
-
登录 root 用户 和 3 个普通用户 (user1、torres、x)
多用户登录界面 - 编辑 /etc/crontab
[root@localhost ~]# vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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
* * * * * root date >> rootdate.txt ## <---- root 用户每分钟输出 date 到 rootdate.txt
* * * * * user1 date >> user1date.txt ## <---- user1 用户每分钟输出 date 到 user1date.txt
* * * * * torres date >> torresdate.txt ## <---- torres 用户每分钟输出 date 到 torresdate.txt
* * * * * x date >> xdate.txt ## <---- x 用户每分钟输出 date 到 xdate.txt
:wq!
-
稍等几分钟,通过 cat 查看各用户文件的输出情况
各用户输出情况
⑦、用脚本完成输出数据到不同用户的家目录。
- vim 编辑各用户脚本。内容都是每分钟输出 date 到指定的用户文件。
## root 用户脚本
[root@localhost ~]# vim rootdate.sh
date >> rootdate.txt ## 输出 date 到 root 用户家目录下,生成 rootdate.txt 记录数据
~
~
~
:wq!
## user1 用户脚本
[root@localhost ~]# vim user1date.sh
date >> /home/user1/user1date.txt ## 输出 date 到 user1 用户家目录下,生成 user1date.txt 记录数据
~
~
~
:wq!
## torres 用户脚本
[root@localhost ~]# vim torresdate.sh
date >> /home/torres/torresdate.txt ## 输出 date 到 torres 用户家目录下,生成 torresdate.txt 记录数据
~
~
~
:wq!
## x 用户脚本
[root@localhost ~]# vim xdate.sh
date >> /home/x/xdate.txt ## 输出 date 到 x 用户家目录下,生成 xdate.txt 记录数据
~
~
~
:wq!
- 新建的脚本文件没有 x 执行权限。
[root@localhost ~]#
[root@localhost ~]# ll
total 16
-rw-r--r--. 1 root root 21 Oct 13 15:34 rootdate.sh
-rw-r--r--. 1 root root 23 Oct 13 15:35 torresdate.sh
-rw-r--r--. 1 root root 22 Oct 13 15:35 user1date.sh
-rw-r--r--. 1 root root 18 Oct 13 15:36 xdate.sh
[root@localhost ~]#
- 为脚本创建拥有者 x 的执行权限,拥有者为 root。
## 所有脚本权限 u 拥有者添加 x 执行权限
[root@localhost ~]#
[root@localhost ~]# chmod u+x rootdate.sh ## 添加文件拥有者 x 可执行权限
[root@localhost ~]# chmod u+x torresdate.sh
[root@localhost ~]# chmod u+x user1date.sh
[root@localhost ~]# chmod u+x xdate.sh
[root@localhost ~]#
[root@localhost ~]# ll
total 16
-rwxr--r--. 1 root root 21 Oct 13 15:34 rootdate.sh ## 拥有者已具有可执行权限
-rwxr--r--. 1 root root 23 Oct 13 15:35 torresdate.sh
-rwxr--r--. 1 root root 22 Oct 13 15:35 user1date.sh
-rwxr--r--. 1 root root 18 Oct 13 15:36 xdate.sh
[root@localhost ~]#
- root 用户 vim 编辑 /etc/crontab,调用对应的用户脚本。注:这次把脚本文件的父路径添加到 PATH 环境变量当中,所以调用时只需写脚本名。
[root@localhost ~]#
[root@localhost ~]# vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/root/ ## 脚本的父路径添加到环境变量中 :/root/
MAILTO=root
# 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
* * * * * root rootdate.sh ## 只需写脚本文件名
* * * * * root torresdate.sh
* * * * * root user1date.sh
* * * * * root xdate.sh
~
~
:wq ## 保存并退出
- 脚本调用成功后,各用户的家目录下会生成对应的文件记录 date 数据。
## root 家目录
[root@localhost ~]# ll
total 20
-rwxr--r--. 1 root root 21 Oct 13 15:34 rootdate.sh
-rw-r--r--. 1 root root 174 Oct 13 15:59 rootdate.txt
-rwxr--r--. 1 root root 36 Oct 13 15:45 torresdate.sh
-rwxr--r--. 1 root root 34 Oct 13 15:45 user1date.sh
-rwxr--r--. 1 root root 26 Oct 13 15:46 xdate.sh
[root@localhost ~]#
[root@localhost ~]# cat rootdate.txt
Wed Oct 13 15:54:01 CST 2021
Wed Oct 13 15:55:01 CST 2021
Wed Oct 13 15:56:01 CST 2021
Wed Oct 13 15:57:02 CST 2021
Wed Oct 13 15:58:01 CST 2021
Wed Oct 13 15:59:01 CST 2021
Wed Oct 13 16:00:01 CST 2021
Wed Oct 13 16:01:01 CST 2021
[root@localhost ~]#
## user1 家目录
[user1@localhost ~]$
[user1@localhost ~]$ ll
total 4
-rw-r--r--. 1 root root 232 Oct 13 16:01 user1date.txt
[user1@localhost ~]$
[user1@localhost ~]$ cat user1date.txt
Wed Oct 13 15:54:01 CST 2021
Wed Oct 13 15:55:01 CST 2021
Wed Oct 13 15:56:01 CST 2021
Wed Oct 13 15:57:02 CST 2021
Wed Oct 13 15:58:01 CST 2021
Wed Oct 13 15:59:01 CST 2021
Wed Oct 13 16:00:01 CST 2021
Wed Oct 13 16:01:01 CST 2021
[user1@localhost ~]$
## torres 家目录
[torres@localhost ~]$ ll
total 4
-rw-r--r--. 1 root root 232 Oct 13 16:01 torresdate.txt
[torres@localhost ~]$
[torres@localhost ~]$ cat torresdate.txt
Wed Oct 13 15:54:01 CST 2021
Wed Oct 13 15:55:01 CST 2021
Wed Oct 13 15:56:01 CST 2021
Wed Oct 13 15:57:02 CST 2021
Wed Oct 13 15:58:01 CST 2021
Wed Oct 13 15:59:01 CST 2021
Wed Oct 13 16:00:01 CST 2021
Wed Oct 13 16:01:01 CST 2021
[torres@localhost ~]$
## x 家目录
[x@localhost ~]$ ll
total 4
-rw-r--r--. 1 root root 232 Oct 13 16:01 xdate.txt
[x@localhost ~]$
[x@localhost ~]$ cat xdate.txt
Wed Oct 13 15:54:01 CST 2021
Wed Oct 13 15:55:01 CST 2021
Wed Oct 13 15:56:01 CST 2021
Wed Oct 13 15:57:02 CST 2021
Wed Oct 13 15:58:01 CST 2021
Wed Oct 13 15:59:01 CST 2021
Wed Oct 13 16:00:01 CST 2021
Wed Oct 13 16:01:01 CST 2021
[x@localhost ~]$
⑧、root 用户制定备份各用户数据。
- 首先,root 目录下新建一个备份目录 backup_dates,backup_dates 目录内新建 root_dates、user1_dates、torres_dates 和 x_dates 目录。分别用来存储 root、user1、torres 和 x 用户的数据。
[root@localhost ~]#
[root@localhost ~]# mkdir backup_dates ## 备份目录
[root@localhost ~]#
[root@localhost ~]# cd backup_dates/
[root@localhost backup_dates]#
[root@localhost backup_dates]# mkdir root_dates ## 各用户资料的备份目录
[root@localhost backup_dates]# mkdir user1_dates
[root@localhost backup_dates]# mkdir torres_dates
[root@localhost backup_dates]# mkdir x_dates
[root@localhost backup_dates]#
[root@localhost backup_dates]# ll
total 0
drwxr-xr-x. 2 root root 6 Oct 13 16:13 root_dates
drwxr-xr-x. 2 root root 6 Oct 13 16:13 torres_dates
drwxr-xr-x. 2 root root 6 Oct 13 16:13 user1_dates
drwxr-xr-x. 2 root root 6 Oct 13 16:13 x_dates
[root@localhost backup_dates]#
- root 编辑 backdates.sh 脚本。脚本内容是同步各用户家目录下的所有数据到 /root/backup_dates/ 目录下各个对应的目录。
[root@localhost ~]#
[root@localhost ~]# vim backdates.sh
## root 家目录下的所有文件同步到 /root/backup_dates/root_dates 目录。
rsync -a /root/* /root/backup_dates/root_dates
## user1 家目录下的所有文件同步到 /root/backup_dates/user1_dates
rsync -a /home/user1/* /root/backup_dates/user1_dates
## torres 家目录下的所有文件同步到 /root/backup_dates/torres_dates
rsync -a /home/torres/* /root/backup_dates/torres_dates
## x 家目录下的所有文件同步到 /root/backup_dates/x_dates
rsync -a /home/x/* /root/backup_dates/x_dates
~
~
~
:wq ## 保存并退出
- root 编辑 /etc/crontab,制定 10 月13 日 17 点整调用 backdates.sh 脚本。
[root@localhost ~]#
[root@localhost ~]# vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/root/
MAILTO=root
# 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
* * * * * root rootdate.sh
* * * * * root torresdate.sh
* * * * * root user1date.sh
* * * * * root xdate.sh
0 17 13 10 * root backdates.sh ## 10 月 13 日 17 点整调用 backdates.sh 脚本
~
:wq ## 保存并退出
- 等待到了17点整。backup_dates 目录下的 root_dates/、torres_dates/、 user1_dates/ 和 x_dates/ 目录都已经保存了对应用户家目录下的数据。
[root@localhost backup_dates]#
[root@localhost backup_dates]# ll root_dates/ ## root 用户家目录的备份数据
total 24
-rwxr--r--. 1 root root 203 Oct 13 16:42 backdates.sh
drwxr-xr-x. 6 root root 78 Oct 13 16:13 backup_dates
-rwxr--r--. 1 root root 21 Oct 13 15:34 rootdate.sh
-rw-r--r--. 1 root root 1943 Oct 13 17:00 rootdate.txt
-rwxr--r--. 1 root root 36 Oct 13 15:45 torresdate.sh
-rwxr--r--. 1 root root 34 Oct 13 15:45 user1date.sh
-rwxr--r--. 1 root root 26 Oct 13 15:46 xdate.sh
[root@localhost backup_dates]#
[root@localhost backup_dates]# ll torres_dates/ ## torres 用户家目录的备份数据
total 4
-rw-r--r--. 1 root root 1943 Oct 13 17:00 torresdate.txt
[root@localhost backup_dates]#
[root@localhost backup_dates]# ll user1_dates/ ## user1 用户家目录的备份数据
total 4
-rw-r--r--. 1 root root 1943 Oct 13 17:00 user1date.txt
[root@localhost backup_dates]#
[root@localhost backup_dates]# ll x_dates/ ## x 用户家目录的备份数据
total 4
-rw-r--r--. 1 root root 1943 Oct 13 17:00 xdate.txt
[root@localhost backup_dates]#
⑨、run-parts,读取目录下所有可执行文件。
- root 目录创建 sh 目录,用来存储所有 .sh 脚本文件。在 sh 目录下创建 4个脚本文件。脚本内容:输出 date ,分别保存到 root、user1、torres、x 的家目录。
[root@localhost ~]# mkdir sh ## 创建 sh 目录
[root@localhost ~]#
[root@localhost ~]# cd sh ## 进入 sh 目录
[root@localhost sh]#
[root@localhost sh]# vim rootdate.sh ## 编辑 rootdate.sh 的脚本
date >> /root/rootdate.txt ## 输出 date 到 /root/rootdate.txt 文件
~
~
~
:wq ## 保存并退出
- 编辑 user1date.sh 脚本, 输出 date 到 /home/user1/user1date.txt 文件
[root@localhost sh]# vim user1date.sh
date >> /home/user1/user1date.txt
~
~
~
:wq
- 编辑 torresdate.sh 脚本, 输出 date 到 /home/torres/torresdate.txt 文件
[root@localhost sh]# vim torresdate.sh
date >> /home/torres/torresdate.txt
~
~
~
:wq
- 编辑 xdate.sh 脚本, 输出 date 到 /home/x/xdate.txt 文件
[root@localhost sh]# vim xdate.sh
date >> /home/x/xdate.txt
~
~
~
:wq
- 为脚本文件赋予拥有者 x 的执行权限。
[root@localhost sh]#
[root@localhost sh]# chmod u+x rootdate.sh
[root@localhost sh]# chmod u+x user1date.sh
[root@localhost sh]# chmod u+x torresdate.sh
[root@localhost sh]# chmod u+x xdate.sh
[root@localhost sh]#
[root@localhost sh]# ll
total 16
-rwxr--r--. 1 root root 27 Oct 15 09:24 rootdate.sh
-rwxr--r--. 1 root root 36 Oct 15 09:26 torresdate.sh
-rwxr--r--. 1 root root 34 Oct 15 09:25 user1date.sh
-rwxr--r--. 1 root root 26 Oct 15 09:26 xdate.sh
[root@localhost sh]#
- vim 编辑 /etc/crontab 文件。用 run-parts 调用 /root/sh 目录所有的执行文件。
[root@localhost ~]# vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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
* * * * * root run-parts /root/sh ## run-parts 调用 /root/sh 目录下的所有执行文件
~
~
~
~
~
:wq
- 等待一段时间,root 用户的家目录生成了 rootdate.txt 文件,cat rootdate.txt 文件看到 date 的输出内容。
[root@localhost ~]# ll
total 4
-rw-r--r--. 1 root root 58 Oct 15 09:32 rootdate.txt
drwxr-xr-x. 2 root root 82 Oct 15 09:26 sh
[root@localhost ~]#
[root@localhost ~]# cat rootdate.txt
Fri Oct 15 09:31:01 CST 2021
Fri Oct 15 09:32:01 CST 2021
Fri Oct 15 09:33:01 CST 2021
Fri Oct 15 09:34:01 CST 2021
Fri Oct 15 09:35:01 CST 2021
Fri Oct 15 09:36:02 CST 2021
Fri Oct 15 09:37:01 CST 2021
Fri Oct 15 09:38:01 CST 2021
Fri Oct 15 09:39:01 CST 2021
Fri Oct 15 09:40:01 CST 2021
[root@localhost ~]#
- torres 用户的家目录生成了 torresdate.txt 文件,cat torresdate.txt 文件看到 date 的输出内容。
[torres@localhost ~]$ ll
total 4
-rw-r--r--. 1 root root 58 Oct 15 09:32 torresdate.txt
[torres@localhost ~]$ cat torresdate.txt
Fri Oct 15 09:31:01 CST 2021
Fri Oct 15 09:32:01 CST 2021
Fri Oct 15 09:33:01 CST 2021
Fri Oct 15 09:34:01 CST 2021
Fri Oct 15 09:35:01 CST 2021
Fri Oct 15 09:36:02 CST 2021
Fri Oct 15 09:37:01 CST 2021
Fri Oct 15 09:38:01 CST 2021
Fri Oct 15 09:39:01 CST 2021
Fri Oct 15 09:40:01 CST 2021
[torres@localhost ~]$
- user1 用户的家目录生成了 user1date.txt 文件,cat user1date.txt 文件看到 date 的输出内容。
[user1@localhost ~]$ ll
total 4
-rw-r--r--. 1 root root 58 Oct 15 09:32 user1date.txt
[user1@localhost ~]$ cat user1date.txt
Fri Oct 15 09:31:01 CST 2021
Fri Oct 15 09:32:01 CST 2021
Fri Oct 15 09:33:01 CST 2021
Fri Oct 15 09:34:01 CST 2021
Fri Oct 15 09:35:01 CST 2021
Fri Oct 15 09:36:02 CST 2021
Fri Oct 15 09:37:01 CST 2021
Fri Oct 15 09:38:01 CST 2021
Fri Oct 15 09:39:01 CST 2021
Fri Oct 15 09:40:01 CST 2021
[user1@localhost ~]$
- x 用户的家目录生成了 xdate.txt 文件,cat xdate.txt 文件看到 date 的输出内容。
[x@localhost ~]$ ll
total 4
-rw-r--r--. 1 root root 58 Oct 15 09:32 xdate.txt
[x@localhost ~]$ cat xdate.txt
Fri Oct 15 09:31:01 CST 2021
Fri Oct 15 09:32:01 CST 2021
Fri Oct 15 09:33:01 CST 2021
Fri Oct 15 09:34:01 CST 2021
Fri Oct 15 09:35:01 CST 2021
Fri Oct 15 09:36:02 CST 2021
Fri Oct 15 09:37:01 CST 2021
Fri Oct 15 09:38:01 CST 2021
Fri Oct 15 09:39:01 CST 2021
Fri Oct 15 09:40:01 CST 2021
[x@localhost ~]$
- 以上记录了通过 run-parts 调用目录所有的执行文件的例子。