linux任务计划cron,chkconfig工具,systemd管理服务,unit介绍,target介绍

linux任务计划cron

  • 任务计划能够在指定的时间段
  • 执行预先设置好的命令或者脚本
  • 如图,cat /etc/crontab 查看任务计划配置文件内容
  • crontab 文件里面定义了3个变量
  • 分别是 SHELL,PATH,MAILTO
  • SHELL 就是执行命令使用的shell是哪一个,这里是bash
  • PATH 是环境变量,执行命令的时候
  • 若是命令路径不是绝对路径,就会在这些环境变量的目录里面
  • 寻找命令或者脚本文件
  • MAILTO 是发送邮件给谁的变量,这里是 root
  • 如图,配置文件下面是 任务计划的格式
  • 第一个星号 * 能够设置分钟,设置的范围是 0-59
  • 第二个星号 * 能够设置小时,设置范围是 0-23
  • 第三个星号 * 能够设置每个月几号,设置范围是 1-31
  • 第四个星号 * 能够设置月份,设置范围是 1-12 或者 jan,feb等月份英文简写代替数字
  • 第五个星号 * 能够设置星期几,设置范围是 0-6
  • 或者使用英文简写 sun,mon,tue 代替数字
  • 其中 星期天 比较特殊,可使用数字 0 或者 7 表示
  • 前面的星号 * 能够设置不一样的时间
  • 设置完时间,后面接 执行命令的用户名称,就是 user-name
  • 而后是被执行的 命令 或者 脚本 的路径
  • 在 root 用户下写任务计划,若是不写 user-name
  • 那么默认的用户名称就是 root
  • 命令 crontab -e 能够定义任务计划
  • 使用 crontab -e 进入任务计划编辑,操做跟vi同样,按 i 开始编辑
  • 如图,0 3 * * * /bin/bash /usr/local/sbin/123.sh
  • 这条命令是定义了一个天天3点0分执行123.sh脚本的任务计划
  • 首先 0 表示第 0 分钟,3表示天天第3个小时,也就是3点
  • 合起来就是 3点0分
  • 后面 * 表示所有,不写数字,写 * 就表明全部的意思
  • 第3个* 表示每个月几号,这里是 * ,就表示每月全部的日期
  • 若是写一个数字,就表示特指那一天,写 * 就表示这个月的每一天
  • 第4个* 表示月份,范围是 1-12 月,这里写 * 也表示所有
  • 若是写一个数字,表示特指某一个月,写 * 就表示包含全部的月份
  • 第5个* 表示星期几,这里写 * 表示包含一个星期的每一天
  • /bin/bash 是指执行脚本用到的 shell
  • /usr/local/sbin/123.sh 就是脚本的绝对路径
  • 这里没有写执行的用户名称,那么就是默认的用户 root
  • 因此这个任务命令的意思就是
  • 每月,天天,3点,0分 ,不论是星期几,都执行 123.sh 脚本
  • 如图后面还能够写 >>/tmp/123.log 2>>/tmp/123.log
  • 这是把执行脚本产生的日志信息追加剧定向到 123.log
  • 后面的 >>/tmp/123.log 表示把执行脚本的日志信息追加剧定向到 123.log
  • 而后 2>>/tmp/123.log 表示把执行脚本的错误信息追加剧定向到 123.log
  • 符号 >> 能够追加通常日志信息,2>>能够追加错误信息
  • 如图,把第3个* 修改成 1-10
  • 每一个 * 的位置,除了可使用单个数字外,还能够指定一个范围
  • 好比这里 第3个* 表示每月的 1-31号,1-10 就表示 1号到10号 这个范围
  • 这样修改以后,每月除了1-10号以外,就不会再执行这个脚本了
  • 如图,还能够这样使用
  • 第4个* 的位置,修改成 */2 意思是,能够整除 2 的月份才会执行脚本
  • 第5个* 的位置,修改成 2,5 意思是 星期二 和 星期五才会执行脚本
  • 因此整条命令的意思就是
  • 整除2的月份,也就是双数月份,1-10号,3点0分,星期二或者星期五 执行脚本
  • 第5个* 的位置,除了写单个数字,也能够写多个数字
  • 好比 1,2,3 这样,不一样数字之间使用 , 分隔
  • 时间设置这里不能够设置年份,可是实际上仍是能够指定某一年的某个时间执行命令
  • 使用 星期 就能够肯定某一天的惟一性
  • 好比今年的6月18号,和明年的6月18号,星期几 必定是不同的
  • 因此设置星期几就能够肯定是 今年的6月18执行命令,仍是明年的6月18执行命令
  • 要使用任务计划,须要启动任务计划服务,使用上图命令启动服务
  • 要肯定服务是否启动成功,可使用上图命令查看进程
  • 如图,下面有 /usr/sbin/crond -n 的进程在运行,说明启动成功
  • 如图,使用命令 systemctl status crond 查看 crond 的状态
  • 能够看到 绿色的字 active(running) 表示已经在运行了,说明服务启动成功
  • 如图,若是关闭crond服务,再查看服务的状态
  • 能够看到,以前绿色字的位置,变成了 inactive(dead) 就表示服务没有在运行

  • 不少人遇到过这个问题,让任务计划执行一个脚本,可是最后任务计划并无执行
  • 根据经验,颇有多是执行的脚本里面有一些问题
  • 好比脚本里面执行 iptables 这个命令
  • 若是让任务计划执行这个脚本,任务计划会在 环境变量 的目录里面
  • 寻找 iptables 这个命令,若是找不到,这个脚本就执行不了
  • 有两个办法解决
  • 一个是把 iptables 命令文件的目录,加入到crontab配置文件的环境变量里面
  • 第二个是脚本里面的命令,都使用绝对路径来写
  • 好比,iptables 命令,不写 iptables 这样没有路径的命令
  • 而是写 /usr/sbin/iptables 这样的命令文件绝对路径
  • 如图,这个脚本设置了一个变量 ipt
  • ipt 的值是 /usr/sbin/iptables ,这就是iptables命令文件的绝对路径
  • 而后后面的命令都是使用 ipt 来执行的
  • 这样就不会出现找不到命令路径的问题了
  • 通常来讲不要修改crontab配置文件的环境变量
  • 因此脚本最好仍是使用命令的绝对路径来写

  • 每设置一个任务计划,应该在后面把任务日志追加剧定向到一个文件里面
  • 这样若是一个任务计划出现了一些问题,就能够查看任务日志查找问题缘由
  • 如图,crontab -l 就能够看到目前有什么任务计划
  • 关于任务计划的备份
  • 如图,crontab -l 就是 列出任务计划的意思
  • crontab -l 列出的内容实际上保存在一个文件里面
  • cat /var/spool/cron/root 能够看到,内容与crontab -l 列出的内容一致
  • 目录 /var/spool/cron/ 里面保存了不一样用户的任务计划文件
  • root用户的任务计划文件就是 root,若是是别的用户
  • 任务计划文件的名称也跟别的用户名称是一致的
  • 因此,要备份用户任务计划,到/var/spool/cron/ 目录下面
  • 找到本身要备份的用户的任务计划,复制一份保存好就好了
  • crontab 命令还有不一样的选项
  • crontab -r 表示删除任务计划
  • 如图,执行crontab -r 以后,再执行 crontab -l 能够发现任务计划没有了
  • 下面显示 no crontab for root 表示任务计划已经没有了
  • crontab -u root -l 能够显示指定用户的任务计划
  • 参数 -u 能够指定用户名称,后面接用户名称 root

chkconfig工具

  • chkconfig 是一个管理服务的工具
  • 不过 centOS7 已经不使用这个工具对服务进行管理了
  • 可是若是工做中使用的是旧版本的 centOS
  • 就须要用到 chkconfig工具来管理服务
  • 如图,chkconfig --list 能够查看chkconfig工具管理的服务
  • 能够看到只有两个服务,可是以前启动了 crond 服务,这里没有显示
  • 看中文说明,该输出结果只显示 SysV 服务
  • SysV 服务是指并不是 centOS7 原生的服务
  • 旧版centOS服务就是属于 SysV 服务
  • centOS7 原生的服务属于 systemd 服务
  • 这里不显示 systemd 服务,因此看不到 crond 服务
  • 每一个服务都有它的脚本存在
  • chkconfig 看到的两个服务的脚本的存放目录就是
  • ls /etc/init.d/ 能够看到目录下面,有这两个服务名称的文件存在
  • 这就是这两个服务的脚本文件

  • 如图,0,1,2,3,4,5,6 表示linux的7个运行级别
  • 0 表示关机,1 表示单用户模式
  • 2 表示没有 nfs 服务的,多用户,无图形界面的模式
  • 3 表示有 nfs 服务的,多用户,无图形界面的模式
  • 4 是一个保留的级别,暂时没用
  • 5 表示多用户的,有图形界面的模式
  • 6 表示重启
  • 如图,修改这个文件,能够定义系统默认的运行级别
  • 若是把系统默认运行级别修改成 1 ,那么一开机就会进入单用户模式
  • 若是默认级别修改成6 ,那么启动后就会重启,这样就进入不了系统了
  • 不过 centOS7 开始已经再也不使用这个文件来定义默认运行级别
  • 如图,使用 chkconfig network off 改变network的状态
  • 再查看服务,能够看到,network 在 2-5 级别都是 关 的状态
  • 这表示,系统在这几个运行级别中,这个服务都是关闭的状态
  • 如图,使用命令 chkconfig network on
  • 再查看服务状态
  • 能够看到,运行级别 2-5 都显示为开
  • 这表示,系统运行在这几个级别的时候,这个服务是开启状态
  • 如图,能够指定服务在某一个运行级别关闭
  • chkconfig --level 3 network off
  • 这样就指定了 network服务 在3级别时关闭
  • chkconfig --list 查看,3 后面是 关
  • 如图,还能够同时设置不一样运行级别为关闭状态
  • chkconfig --level 35 network off
  • 就能够同时设置 级别 3 和 级别 5 的时候,服务为关闭状态
  • 下面 chkconfig --level 345 network on
  • 能够同时设置 服务 在运行级别 3,4,5 都为开启状态
  • 0表明关机状态,1表明单用户模式,6表明重启状态
  • 这 3 个状态都是不可能运行服务的,因此这3个状态只能设置为关

  • ls 查看 /etc/init.d 目录
  • 使用 cp network 123 把network文件复制一份,并更名为123
  • 再ls 查看,能够看到多了一个 123文件
  • 如今要把 123 脚本加入到 chkconfig 里面运行
  • 如图 chkconfig --addd 123 这样就能够把123脚本加入chkconfig了
  • chkconfig --list 查看运行的服务
  • 能够看到,多了 123 服务
  • 使用 vim 打开 123 文件
  • 自定义加入 chkconfig 的脚本文件,必须符合特定的格式才行
  • 如图 ! /bin/bash 表示这是shell脚本
  • 而后 chkconfig: 2345 10 90
  • 2345表示在这些运行级别能够运行
  • 10表示运行顺序,第10位运行
  • 90表示 第90位关闭
  • description 表示 脚本描述
  • chkconfig 和 description 信息都是必需要有的
  • 这样文件才能被 chkconfig 识别
  • 能够添加服务,也能够删除服务
  • 使用 chkconfig --del 123 就能够把123服务从chkconfig删除
  • 使用 chkconfig --list 查看
  • 能够看到 123 服务没有了
  • chkconfig 主要是用在 旧版本的centOS 上面的
  • 从 centOS 7 开始已经再也不使用了

systemd管理服务

  • 从 centOS7 开始,系统服务的管理工具是 systemd
  • 如图,使用 systemctl list-unit-files 查看全部服务
  • 如图,查看全部服务,不仅有service,还有socket,target等进程
  • 除了 systemctl list-unit-files 能够查看服务外
  • 还可使用 systemctl list-units --all --type=service 查看进程
  • 这条命令主要是查看 service 类型的进程
  • 如图,列出的全部进程都是service类型的
  • 最右边一列,是进程的描述信息
  • 若是不使用参数 --all
  • systemctl list-units --type=service
  • 如图,能够看到,把 --all 参数去掉后
  • 列出来的 service ,在ACTIVE那一列都是 active 的状态,表示在运行
  • 若是使用 --all,就会把状态为 inactive 的service 也列出来
  • inactive 表面没有在活动的状态

  • 如图,systemctl enable crond 或者 crond.service
  • crond 能够加 .service 也能够不加
  • 这条命令可让 crond 服务开机启动
  • systemctl diable crond 能够关闭该服务的开机启动
  • 如图,systemctl status crond.service
  • 能够查看 crond 服务的状态
  • 能够看到,如今是 active 状态
  • systemctl stop crond 能够中止crond 服务
  • systemctl start crond 能够启动crond 服务
  • systemctl restart crond 能够重启crond 服务
  • 如图,systemctl is-enabled crond 检测crond服务是否开机启动
  • 能够看到,下面显示 enabled 表示 是开机启动
  • 而后 disable crond 服务
  • 再检测一遍,下面显示 disabled 表示 不是开机启动
  • 如图,使用命令 systemctl enable crond 的时候
  • 下面有一些输出信息,包含了配置文件的地址
  • cat /etc/systemd/system/multi-user.target.wants/crond.service
  • 能够看到 crond 服务的配置文件的内容
  • 使用 ls -l /etc/systemd/system/multi-user.target.wants/crond.service
  • 能够看到,这个文件是 /usr/lib/systemd/system/crond.service 的软连接
  • 如图,systemctl disable crond 把 crond 服务设置为 disable
  • 再使用 ls -l /etc/systemd/system/multi-user.target.wants/crond.service
  • 查看 /etc/systemd/system/multi-user.target.wants/crond.service 的信息
  • 发现 /etc/systemd/system/multi-user.target.wants/crond.service 软连接不见了
  • 系统判断一个服务是否开机启动,就是根据这个软连接来的
  • 若是把一个服务设置为 enable 开机启动
  • /etc/systemd/system/multi-user.target.wants/ 这个目录下面就会建立软连接
  • 若是把服务设置为 disable
  • /etc/systemd/system/multi-user.target.wants/ 目录下面的软连接就会被删除
  • 系统能够根据这个软连接是否存在判断服务的状态

unit介绍

  • ls /usr/lib/systemd/system 能够看到系统里面全部的 unit
  • 如图,unit 分为不一样的类型
  • 上图是一些关于 unit 的命令
  • systemctl list-units 列出正在运行的unit
  • 如图加入 --all 参数
  • 会把全部的 unit 都列出来,包括失败或者inactive
  • 参数 --state=inactive 能够指定状态
  • 这里指定了状态为 inactive 的unit才会被列出来
  • 由于默认就是列出 active 的 unit
  • 因此 active 不须要用 --state来指定
  • 除了 active 之外的别的状态会须要用到 --state 来指定
  • systemctl list-units --all --state=inactive
  • 命令表示先列出全部unit,再筛选出state为 inactive 的 unit
  • systemctl list-units --type=service
  • 参数 --type=service 能够指定 unit 的类型
  • 这里 指定了 service 类型
  • 由于 systemctl list-units 会列出全部状态为 active 的unit
  • 加上 --type=service 就会再把 unit类型为service 的 unit 筛选出来
  • systemctl is-active crond.service
  • 这条命令能够检测 crond 服务是否为 active
  • 如图,active 表示服务检测结果为 active
  • systemctl is-enabled crond.service
  • 能够检测 crond 服务是否开机启动
  • 返回 enabled 表示 是开机启动

target介绍

  • systemctl list-unit-files --type=target 能够查看系统全部的target文件
  • target 是由多个 unit 组成的
  • systemctl list-dependencies multi-user.target
  • 能够查看 multi-user.target 下面有哪些 unit
  • 能够看到,multi-user.target 下面有不少 service 文件
  • 也有 path 文件,还有一些别的 unit 类型文件在里面
  • 这些 unit 组成了 multi-user-target
  • 如图,target 文件里面也能够包含 target 文件
  • 如图 systemctl get-default 返回 multi-user.target
  • 这条命令能够返回 系统默认的target名称
  • 这里系统默认的 target 就是 multi-user.target
  • 经过更改默认的 target 就至关于在centOS7里面修改运行级别
  • 好比 multi-user.target 就表示多用户的运行级别
  • systemctl set-default multi-user.target 能够设置默认 target
  • 下面是系统输出的信息
  • /etc/systemdd/system/default.target 是从新设置默认target后
  • 系统从新建立的 默认target文件
  • 如图,使用 ls -l /etc/systemdd/system/default.target 查看详细信息
  • 发现 /etc/systemdd/system/default.target 是一个软连接文件
  • 连接对象是 /usr/lib/systemd/system/multi-user.target
  • 若是设其它 target 做为默认的 target
  • 系统就会从新建立一个新的软连接,连接对象也会改变
  • 一个target里面可能包含不少service文件
  • 怎么查看某个service属于哪一个target文件呢?
  • 如图,cat /usr/lib/systemd/system/sshd.service 查看 sshd.service内容
  • 找到 [Install] 信息
  • WantedBy=multi-user.target 表示这个service属于multi-user.target
相关文章
相关标签/搜索