文章篇幅较长,建议先收藏,防止迷路
文章 | 跳转 |
---|---|
Linux从入门到精通(八)——Linux磁盘管理 | go |
Linux从入门到精通(九)——Linux编程 | go |
Linux从入门到精通(十)——进程管理 | go |
Linux从入门到精通(十一)——计划任务 | go |
Linux从入门到精通(十二)——shell编程 | go |
目录
计划任务
在很多时候为了自动化管理系统,我们都会用到计划任务,比如关机,管理,备份之类的操作,我们都可以使用计划任务来完成,这样可以是管理员的工作量大大降低,而且可靠度更好。 Linux 系统支持一些能够自动执行任务的服务,我们称为计划任务。
什么是计划任务:
配置在指定时间,指定的日期执行预先计划好的任务(例如:备份,广播 )
一、周期性
crond服务需启动
1. crontab 命令
crontab [-选项]
- -l:列举当前用户计划任务
- -e:编辑计划任务(vi编辑),不建议
- -r:删除计划任务
- -u:指定用户,发布计划任务(只能root来执行)
补充:
并不主张
-e
编写计划任务,因为e和r键位相近,容易误删。
那么我们如何编写一个计划任务呢?
通常,使用vi直接编写一个计划任务文件,命名“用户名+cron”,编辑好后发布:
crontab [文件名]
2. 计划任务格式:
分 时 日 月 星期 要执行的命令(脚本)
# 范围:
[0-59] [0-23] [1-31] [1-12] [0-6](0代表周日)
注意:
- 每个域都不可以空,必须写入,不设置使用
*
- 每个域可以使用多个值,不连续的使用
,
进行分割,连续的使用-
。 - 命令要给出绝对路径。
- 用户必须具备对用的权限。
- 特殊形式
*/n
:n是一个数字,代表每多久。
3. 例子
【例1】
每隔2分钟,将当前日期写入
/hyy/cronstudy/a.txt
中。*/2 * * * * /usr/bin/date >> /hyy/cronstudy/a.txt
不退出vi,执行命令:
查询date命令所在位置。
:! which date
发布,并查看计划任务列表:
[root@hyy cronstudy]# crontab rootcron [root@hyy cronstudy]# crontab -l */2 * * * * /usr/bin/date >> /hyy/cronstudy/a.txt
4. 运行原理:
corn命令运行时,会搜索/var/spool/cron
目录,寻找系统中存在的用户设定的计划任务,并载入内存运行:
[root@hyy cronstudy]# cd /var/spool/cron/
[root@hyy cron]# ll
total 4
-rw-------. 1 root root 50 Nov 12 01:34 root
[root@hyy cron]# cat root
*/2 * * * * /usr/bin/date >> /hyy/cronstudy/a.txt
crontab 发布计划任务后,就会在该目录下产生一个用户同名文件。
5. 计划任务权限
用户是否可以使用crontab
命令计划任务,和/etc/cron.allow
文件以及/etc/cron.deny
文件相关。
-
如果
/etc/cron.allow
文件存在,用户名不在其中,该用户不可以执行计划任务如果这个文件不存在,就都可以执行,即没有限制。
-
如果
/etc/cron.deny
,用户名在其中,该用户不可以执行计划任务。
6. 实例
【例1】
每天晚上21:30分,重启apache服务:
# 分 时 天 月 星期 命令 30 21 * * * /usr/sbin/service httpd restart
【例2】
每周一、三、五的下午3:00 重启系统# 分 时 天 月 星期 命令 00 15 * * 1,3,5 /usr/sbin/shutdwon -r now
【例3】
每小时的10分、40分,将/home/hyy目录下的message文件内容广播给所有用户
# 分 时 天 月 星期 命令 10,40 * * * * /usr/bin/wall < /home/hyy/message
【例4】
每小时的1分执行
/bin/account
指令# 分 时 天 月 星期 命令 1 * * * * /bin/accont
【例5】
每年的3月和6月,2号到8号的7点20分和7点50分执行
/bin/date
命令,并将结果添加到/test/backlog.txt
文件内容后。# 分 时 天 月 星期 命令 20,50 7 2-8 3,6 * /bin/date >> /test/backlog.txt
二、一次性
atd服务需启动
1. at 命令
at [-选项] time date
> 输入命令
<ctrl+d>结束
-
-f file :at安排的计划任务,均放在文件file中
file文件里放了多个命令:
at -f file time date
-
-l:查看安排的作业,等同于atq
-
-d:删除指定的执行命令序列,等同于atrm
time date格式
time date
格式比较灵活
-
hh:mm
:几时几分; -
midnight:深夜;
noon:中午
teatime:下午
-
12小时制:AM PM
-
日期:mm/dd/yy(月日年)
-
now+n minutes(hours,days)
现在的时间,过几分钟(小时,天)
下午3点:
at 15:00
at 3.00PM
at 15:00 today
现在是下午2.:
at now+ 1 hours
at now+ 60 minutes
指定某个日期的下午3点:
2022年11月17号:at 15:00 11/17/2022
2022年11月17号:at 15:00 17.11.2022
2. 例子
[root@hyy ~]# at 12:00
at> echo "hello"
at> find / -name "a?c*" -exec rm -f {} \;
at> <EOT>
job 1 at Sat Nov 12 12:00:00 2022
[root@hyy ~]# at 21:00
at> echo "bye"
at> <EOT>
job 2 at Sat Nov 12 21:00:00 2022
[root@hyy ~]# atq # 或者 at -l
1 Sat Nov 12 12:00:00 2022 a root
2 Sat Nov 12 21:00:00 2022 a root
[root@hyy ~]# atrm 2 # 或者 at -d 2
[root@hyy ~]# atq
1 Sat Nov 12 12:00:00 2022 a root
3. at 执行权限
用户是否可以使用at
命令计划任务,和/etc/at.allow
文件以及/etc/at.deny
文件相关。
-
如果
/etc/at.allow
文件存在,用户名不在其中,该用户不可以执行计划任务如果这个文件不存在,就都可以执行,即没有限制。
-
如果
/etc/at.deny
,用户名在其中,该用户不可以执行计划任务。
4. 实例:
【例1】
23:00定时关机:
at 23:00 > shutdown -S -T 50
【例2】
下午茶时间,定时提醒:
at teatime > /usr/bin/wall < rest.txt
【例3】
自动执行脚本
backup.sh
:at 1:00AM > /backup.sh
三、补充:
-
启动某个服务:
service 服务名 start|status|restart|stop
服务一般都存放在
/etc/rc.d/init.d/服务名
我的服务并不在这里,有待探索
例如:
service crond status # 同样的效果 /etc/rc.d/init.d/crond status
-
用户间发送信息:
write命令:
write 用户名 输入信息 <ctrl+d>结束
-
广播
wall命令:
wall 输入内容 <ctrl+d>结合
也可以通过重定向符号,将文件中的内容广播或者发送出去:
以前学的重定向符号:
> >>
,这里使用个新的:<
wall < /test/test.txt
-
Linux下存在两种时间:
-
系统时间
[root@VM-24-17-centos ~]# date Mon Nov 14 16:54:51 CST 2022
-
硬件时钟
[root@VM-24-17-centos ~]# hwclock 2022-11-14 16:57:21.797913+08:00
这两个应该是一致的。
步骤:
-
设置系统时钟时间:
man date #查看帮助
# date 月日时分年.秒 date 111417042022.30
或者(二选一)
设置硬件时钟时间:
man hwclock
hwclock --set --date="11/14/2022 17:04:30"
-
同步时间:
hwclock --hctosys #硬件时钟时间同步到系统 # 或者 clock --systohc # 系统时间同步到硬件时钟
-