Linux从入门到精通(十一)——计划任务

简介: Linux从入门到精通(十一)——计划任务

image.png

计划任务

在很多时候为了自动化管理系统,我们都会用到计划任务,比如关机,管理,备份之类的操作,我们都可以使用计划任务来完成,这样可以是管理员的工作量大大降低,而且可靠度更好。 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

三、补充:

  1. 启动某个服务:
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下存在两种时间:

  1. 系统时间
[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

这两个应该是一致的。

步骤:

  1. 设置系统时钟时间:
man date #查看帮助
# date 月日时分年.秒
date 111417042022.30

或者(二选一)

设置硬件时钟时间:

man hwclock
hwclock --set --date="11/14/2022 17:04:30"

同步时间:

hwclock --hctosys #硬件时钟时间同步到系统
# 或者
clock --systohc # 系统时间同步到硬件时钟


相关文章
|
6天前
|
监控 关系型数据库 MySQL
Alibaba Cloud Linux基础入门(1)——配置zabbix
该文档是关于在Alibaba Cloud Linux上配置Zabbix的教程。首先,通过添加Zabbix仓库并安装相关软件包(如zabbix-server,web前端和agent)。然后,安装并启动MySQL数据库,执行`mysql_secure_installation`进行配置。接着,创建名为zabbix的数据库和用户,并导入Zabbix默认数据。最后,设置Zabbix服务开机自启动,并通过浏览器访问http://服务器IP/zabbix完成Web端配置,使用Admin/zabbix登录。
|
6天前
|
Linux 数据安全/隐私保护 Windows
Linux入门指南:linux权限究竟是什么?和文件有什么关系?
Linux入门指南:linux权限究竟是什么?和文件有什么关系?
32 0
|
6天前
|
监控 网络协议 Java
Linux 网络编程从入门到进阶 学习指南
在上一篇文章中,我们探讨了 Linux 系统编程的诸多基础构件,包括文件操作、进程管理和线程同步等,接下来,我们将视野扩展到网络世界。在这个新篇章里,我们要让应用跳出单机限制,学会在网络上跨机器交流信息。
Linux 网络编程从入门到进阶 学习指南
|
1天前
|
运维 关系型数据库 MySQL
day03-Linux运维-Xshell优化和Linux系统命令入门(2)
day03-Linux运维-Xshell优化和Linux系统命令入门(2)
day03-Linux运维-Xshell优化和Linux系统命令入门(2)
|
1天前
|
运维 Linux Shell
day03-Linux运维-Xshell优化和Linux系统命令入门(1)
day03-Linux运维-Xshell优化和Linux系统命令入门(1)
day03-Linux运维-Xshell优化和Linux系统命令入门(1)
|
6天前
|
Linux 芯片 Ubuntu
Linux驱动入门 —— 利用引脚号操作GPIO进行LED点灯
Linux驱动入门 —— 利用引脚号操作GPIO进行LED点灯
|
6天前
|
Ubuntu Linux
Linux驱动入门 —— 利用寄存器操作GPIO进行LED点灯-2
Linux驱动入门 —— 利用寄存器操作GPIO进行LED点灯
Linux驱动入门 —— 利用寄存器操作GPIO进行LED点灯-2
|
6天前
|
Linux 芯片
Linux驱动入门 —— 利用寄存器操作GPIO进行LED点灯-1
Linux驱动入门 —— 利用寄存器操作GPIO进行LED点灯
Linux驱动入门 —— 利用寄存器操作GPIO进行LED点灯-1
|
6天前
|
Linux C语言 Ubuntu
Linux驱动入门——编写第一个驱动
Linux驱动入门——编写第一个驱动
Linux驱动入门——编写第一个驱动
|
6天前
|
缓存 安全 Linux
Linux入门基本指令(2)
Linux入门基本指令(2)
13 0