34.任务计划cron chkconfig systemctl管理服务 unit target

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

10.23 linux任务计划cron

10.24 chkconfig工具

10.25 systemd管理服务

10.26 unit介绍

10.27 target介绍

 

 

10.23 linux任务计划cron:

在linux中任务计划是必不可少的,因为可能我们凌晨的时候去做一些事情。可能是备份数据或是重启服务啊,这个操作的过程可能是一个脚本,也有可能是一个单独的命令。不管是什么,总得有一个时间要去执行他所以任务计划必不可少。

 

 

~. cat /etc/crontab 这个文件下是任务计划的配置文件,他会定义shell 环境变量、发送邮件给谁

[root@axinlinux-01 ~]# cat /etc/crontab

SHELL=/bin/bash shell

PATH=/sbin:/bin:/usr/sbin:/usr/bin 变量,命令的路径

MAILTO=root 发送邮件给谁

 

# For details see man 4 crontabs

 

# Example of job definition: (下面是他的格式)

# .---------------- minute (0 - 59) 第一位为表示分钟,范围是0-59

# | .------------- hour (0 - 23) 小时,0-23

# | | .---------- day of month (1 - 31) 日期 1-31

# | | | .------- month (1 - 12) OR jan,feb,mar,apr ... 月份1-12,可以写数字也可以写英文的简写

# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat 星期,0-6。周日可以写成0或7

# | | | | |

# * * * * * user-name command to be executed

这5个星表示它的 位

user-name 在root用户下定义任务就是root。不写的话就是root

command to be executed 表示要执行的命令,怎么定义呢,写法为:

crontab -e,这样就进入了crontab的配置文件当中

我们写好的他的任务,怎么确定他的唯一性呢。用周来确定。因为今年的周一跟明年的周一是不一样的

 

~1. crontab -u 、 -e 、 -l 、 -r

综上所述,

-e 进入 crontab的配置文件当中。用法跟vim一样的。按 a 进入编辑模式

-l 可以查看写的任务计划,列出

-r 删除任务

-u 指定用户 例如,crontab -u root -r

~3. 文件 /var/spool/cron/username

crontab的文件在这个路径里面。是用户对应的文件,比如root的就会写上root的,其他的就会写上其他的用户名字,以用户的名字命名的一个文件

~2. 格式:分 时 日 月 周

(user command 进入编辑模式之后,以分时日月周的模式来写,以空格间隔。后面跟命令)

例如 0 3 * * * /binsbin /usr/local/sbin/123.sh (比如写了一个脚本,就这样写任务计划。每天3点执行这个脚本)

0 3 * * * /binsbin /usr/local/sbin/123.sh > /tmp/123.log 2> /tmp/123.log(每天3三点将这个脚本正确的和错误的都输出到这个文件里来。也可以是追加>>

*表示相对应的第几位,表示所有,每天都执行、每月都执行、每周都执行

 

~4. 分范围0-59,时范围0-23,日范围1-31,月范围1-12,周范围0-6

~5. 可用格式1-5表示一个范围 1到5

0 3 1-5 * * /binsbin /usr/local/sbin/123.sh

1-5号的每天3点执行这个脚本

~6. 可用格式1,2,3表示1或者2或者3

0 0 0 */2 2,5 /binsbin /usr/local/sbin/123.sh

每两个月的周二和周五来执行这个脚本

以逗号分隔,周二和周五

~7. 可用格式*/2表示被2整除的数字,比如小时,那就是每隔2小时。只要是被2整除的

0 3 1-5 */2 * /binsbin /usr/local/sbin/123.sh

每两个月,1-5号的3点执行这个脚本

~8. 要保证服务是启动状态

systemctl start crond.service,输入这个才会让他启动这个服务

启动之后可以用 ps aux | grep crond 查看一下,如果有这个服务就代表他已经启动了

也可以用 systemctl status crond 来查看crond的状态。有active (running)并显示为绿色表示已经启动。相反的我们systemctl stop crond 停掉crond,就会有显示inactive (dead)并没有颜色

 

需要注意的是,我们在写完任务计划的时候。必须要启动这个任务计划。 systemctl start crond。

我们在写任务的时候,有用到命令,要写命令的绝对路径才可以生效

任务计划里写上正确和错误的输出文件,以方便我们有据可查

 

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------

 

 

10.24 chkconfig工具:

 

linux系统的服务管理,像我们之前接触到的 crond、firewalld等等都是服务,那我们可以用chkconfig来管理这些服务。怎么样控制这个服务启动,怎么控制这个服务开机启动,怎么让这个服务在指定的级别去启动

chkconfig是centos6之前的版本用的

 

~1. 我们先来执行 chkconfig --list 列出chkconfig管理的服务

[root@axinlinux-01 ~]# chkconfig --list

 

注:该输出结果只显示 SysV 服务,并不包含 6以前的版本服务机制是sysv,所以只显示sysv服务

原生 systemd 服务。SysV 配置数据 7以后得版本为systemd服务机制,所以不会显示

可能被原生 systemd 配置覆盖。

 

要列出 systemd 服务,请执行 'systemctl list-unit-files'。所以想要看systemd服务的要执行该命令

查看在具体 target 启用的服务请执行 target是systemd服务的另一个概念

'systemctl list-dependencies [target]'。

sysv服务机制的只剩下这两个了

netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关 。0-6状态各表示6以前版本的运行级别

network 0:关 1:关 2:开 3:开 4:开 5:开 6:关

0 关机状态 1单用户 2多用户模式(少了nfs服务) 3多用户模式(不带图形)

4保留级别(暂时没用) 5 多用户带图形 6重启

 

~2. 这些服务都是为一个服务的脚本,目录在

/etc/init.d/ 这个里面

[root@axinlinux-01 ~]# ls /etc/init.d/

functions netconsole network README

后期我们学其他服务的时候,还会用到这个路径。把一些启动文件放进来,用chkconfig来管理

 

~3. chkconfg --level 3 network off 指定network服务的3级别关闭

多个级别同时关闭或打开,不用间隔直接写就好。例如:345

0和6级别不会开启服务,因为分别处于关机和重启。1级别也不会开,处于单用户模式

 

~4. chkconfig --add 123 把123服务加入到这个服务列表里面来

[root@axinlinux-01 ~]# cd /etc/init.d 前提是要在这个目录里的服务,才可以进入到列表里来

[root@axinlinux-01 init.d]# ls

functions netconsole network README

[root@axinlinux-01 init.d]# cp network 123 为保险我们复制一个123,为什么要复制因为文件是有格式的,才能被识别

[root@axinlinux-01 init.d]# chkconfig --add 123 把123加入到列表里

[root@axinlinux-01 init.d]# chkconfig --list 查看一下

 

注:该输出结果只显示 SysV 服务,并不包含

原生 systemd 服务。SysV 配置数据

可能被原生 systemd 配置覆盖。

 

要列出 systemd 服务,请执行 'systemctl list-unit-files'。

查看在具体 target 启用的服务请执行

'systemctl list-dependencies [target]'。

 

123 0:关 1:关 2:开 3:开 4:开 5:开 6:关 123服务

netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关

network 0:关 1:关 2:开 3:开 4:开 5:开 6:关

 

~5. chkconfig --del 123 把123服务在列表里删除

 

----------------------------------------------------------------------------------------------------------------------------------------------------

 

10.25 systemd管理服务:

 

systemd是centos7系统的服务管理机制

 

~1. systemctl list-unit-files

我们在chkconfig --list的时候,不会列出systemd的服务。但是会提示我们

“要列出 systemd 服务,请执行 'systemctl list-unit-files'”

我们执行这个systemctl list-unit-files,(按空格往下翻)。会发现他不仅显示servicehaiyou target等等服务,会比较乱。

systemctl list-units --all --type=service(只用这个查看systend服务,只查看service的)

因为我们看的仅仅只是service服务,所以我们可以用 systemctl list-units --all --type=service。这样列出的服务就只有service

 

 

~2.几个常用的服务的命令(重点,常用!!!!)

systemctl enable crond.service 让crond服务开机启动(后缀.service可省略)

syttemctl disable crond.service 不让crond服务开启启动(后缀.service可省略)

systemctl status crond 查看crond状态

含有active (running)且为绿色,表示已启动

systemctl stop crond 停止crond服务

systemctl start crond 启动crond服务

systemctl restart crond 重启crond这个服务

systemctl is-enabled crond 检查crond这个服务是否开机启动

显示enabled即为开机启动 显示disabled即为非开机启动

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

10.26 unit介绍:

(systemd管理服务)

什么叫unit?

通过上一节,我们学到了systemctl,简单知道了 enabled disabled。如果这个服务为 enabled,他就会创建一个软连接,这个软连接的目录为

ls /usr/lib/systemd/system

[root@axinlinux-01 ~]# ls /usr/lib/systemd/system

arp-ethers.service machine.slice sysinit.target

auditd.service machines.target sysinit.target.wants

[email protected] messagebus.service sys-kernel-config.mount

basic.target microcode.service sys-kernel-debug.mount

basic.target.wants multi-user.target syslog.socket

blk-availability.service multi-user.target.wants syslog.target.wants

会发现他有很多的类型,像target、mount、wants(目录)。而这些类型的文件就叫做unit

 

系统所有unit分为以下类型:

~ service 系统服务

~ target 多个组成的组

之间讲到6以前的版本,有7个运行级别。而7也有类似的,就是target文件

[root@axinlinux-01 ~]# cd !$

cd /usr/lib/systemd/system 同样在这个路径里

[root@axinlinux-01 system]# ls -l runlevle* 查看runlevel文件

ls: 无法访问runlevle*: 没有那个文件或目录

[root@axinlinux-01 system]# ls -l runlevel*

同样也有7个运行级别的target,通过也是软连接。他的源就是后面的文件。跟6的7个运行级别,基本对应起来了

lrwxrwxrwx. 1 root root 15 5月 29 07:11 runlevel0.target -> poweroff.target

lrwxrwxrwx. 1 root root 13 5月 29 07:11 runlevel1.target -> rescue.target

lrwxrwxrwx. 1 root root 17 5月 29 07:11 runlevel2.target -> multi-user.target

lrwxrwxrwx. 1 root root 17 5月 29 07:11 runlevel3.target -> multi-user.target

lrwxrwxrwx. 1 root root 17 5月 29 07:11 runlevel4.target -> multi-user.target

lrwxrwxrwx. 1 root root 16 5月 29 07:11 runlevel5.target -> graphical.target

lrwxrwxrwx. 1 root root 13 5月 29 07:11 runlevel6.target -> reboot.target

 

~ device 硬件设备

~ mount 文件系统的挂载点

~ automount 自动挂载点

~ path 文件或路径

~ scope 不是由systend启动的外部进程 比较陌生,熟悉就好

~ slice 进程组

~ snapshot systemd快照

~ socket 进程间通信套接字

~ swap swap文件

~ timer 定时器

 

unit相关的命令:

~ systemctl list-units 列出列出正在运行的unit

~ systemctl list-units --all 列出所有,包括失败的或者inactive的

~ systemctl list-units --all --state=inactive 列出inactive(闲置的)的unit

~ systemctl lit-units --type=service 列出状态为active(活跃的)的service

~ systemctl is-active crond.service 查看某个服务是否为active

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------

 

 

10.27 target介绍:

(systemd管理服务)

 

一个target是由多个unit组合起来的,那么他们是什么联系起来的:

系统为了方便管理,用target来管理unit

 

~ systemctl list-unit-files --type=target 这个命令可以列出系统里面所有的target

~ systemctl list-dependencies multi-user.target 指定查看target(multi-user.target)下面有哪些unit

~ systemctl get-default 查看系统默认的target

就是multi-user.target

~ systemctl set-default multi-user.target 设定默认的target(multi-user.target)

重新设定的时候就会创建一个新的软连接

 

! 一个service 属于其中一种类型的unit

多个unit组成了一个target

一个target里面包含了多个service

cat /usr/lib/systemd/system/sshd.service 看install部分 ,可看到他属于哪个target。例如:

cat这个目录,查看sshd.service。看install部分就会知道 WantedBy=multi-user.target

 

总结:

系统可以说是由多种unit组成的,这么多的unit为了方便管理,那么我们把他们归类,归类成若干个组,我们把它叫做taeget。也就是说target是有多个unit的组成的。那service属于其中一种类型的unit,一个target里面包含了多个service

 

转载于:https://my.oschina.net/u/3866149/blog/1859058

你可能感兴趣的:(操作系统,shell,python)