系统管理
1. linux任务计划cron
讲义
• crontab -u、-e、-l、-r
• 格式:分 时 日 月 周 user command
• 文件/var/spool/cron/username
• 分范围0-59,时范围0-23,日范围1-31,月范围1-12,周1-7
• 可用格式1-5表示一个范围1到5
• 可用格式1,2,3表示1或者2或者3
• 可用格式*/2表示被2整除的数字,比如小时,那就是每隔2小时
• 要保证服务是启动状态
• systemctl start crond.service
在 Linux 系统当中任务计划是必不可少的,因为有时候可能需要凌晨的时候去做一些操作,例如要执行 shell 脚本、备份文件、执行某个命令等等。我们需要设定一个时间去执行这些操作,Windows 因为是作为个人电脑系统居多,所以任务计划在 Windows 中不怎么常见。
- /etc/crontab 是任务计划的配置文件
每个 * 表一位,分别是 分、时、日、月、周, 如果不指定用户的话,默认是 root
- crontab -e 命令可以进入到 crontab 的配置文件当中,用法跟 vim 是一样的
- 如果你想指定一个日期范围可以这么写
- 想要使用 crontab 任务计划的话就需要启动 crond 服务,还可以使用 systemctl status crond 命令查看这个服务的状态
[root@sc ~]# systemctl start crond #启动服务
[root@sc ~]# ps aux |grep cron #检查服务是否启动
[root@sc ~]# systemctl status crond #查看状态
[root@sc ~]#
- systemctl stop crond 命令可以停止 crond 服务
[root@sc ~]# systemctl stop crond
[root@sc ~]# systemctl status crond
[root@sc ~]#
如果你写了一个任务计划,并且服务运行正常,配置的格式也正确,但是到设定的时候却没有执行这个任务计划。这很有可能是你在任务计划的配置文件里写的命令不是绝对路径,如果不是绝对路径的话,就会去找 PATH 环境变量里是否有配置这条命令,PATH 环境变量里没有的话,那么这个任务计划就会执行失败,因为找不到命令的执行路径,所以在任务计划的配置文件里写命令的时候,最好写这个命令的绝对路径。
建议在写任务计划的配置文件的时候将这个任务计划里的命令执行后的结果集重定向到一个日志文件里,错误的信息也是。这样的话才能够保证这个任务有据可查,当这个任务计划执行失败或出问题的话,就可以去查看日志文件,看看其中的错误信息是什么,这样有利于问题的解决。
- crontab -l 命令可以执行任务计划,并且 crontab 文件在 /var/spool/cron/目录下,文件会以设定任务计划的用户名定义,所以要进行备份的话,就直接拷贝文件或 cron 目录即可
- crontab -r 命令删除任务计划
- crontab -u 指定某个用户,例如我要查看 root 用户的任务计划
2. chkconfig工具
讲义
• chkconfig --list
• chkconfig --level 3 network off
• chkconfig --level 345 network off
• chkconfig --del network
• chkconfig --add network
我们都知道 Linux 系统里会有很多服务,例如刚刚使用的 crond 服务、mysql 服务、Nginx 服务、httpd 服务等等,因为有这么多的服务,所以我们需要一个工具来管理,这个工具就是 chkconfig。这是 CentOS6 之前版本所用的一个工具,在 CentOS7 里已经不使用了,但是为了向之前的版本兼容,所以在 CentOS7 依然可以使用。虽然这个工具已经不怎么用了,现在的发展趋势也可能会淘汰掉这个工具,但是因为现在还能够使用,所以我们需要了解一些相关的操作。
- chkconfig --list 命令可以查看当前系统使用 chkconfig 工具的服务
从显示的结果可以看到,现在系统使用chkconfig 工具的服务只有两个,并且也提示了在CentOS7里的的服务模式是systemd。
- 这些使用 chkconfig 工具的服务的脚本都在 /etc/init.d/ 目录下
- chkconfig network off 命令可以关闭 network 服务,chkconfig network on命令可以开启 network 服务
这里的级别表示的是 CentOS6 版本的系统运行级别,在 CentOS7 里是没有这个运行级别的:
0 级别表示关机状态
1 级别表示单用户模式
2 级别表示是命令行的多用户模式,但是和3级别的区别是没有nfs服务
3 级别表示是命令行的多用户模式
4 级别表示保留状态,没什么卵用
5 级别表示图形界面的多用户模式
6 级别表示重启
- chkconfig --level 3 network off 命令可以关闭 network 服务的 3 级别
- chkconfig --level 345 network off 命令可以关闭 3、5 级别
- chkconfig --level 345 network on 命令则是相反可以开启3、4、5级别
- chkconfig --add 可以添加服务,只能添加 /etc/init.d/ 目录下的脚本,例如我直接把 network 脚本拷贝成另一个名称的文件,然后添加上去
- 这个脚本名称可以任意,但是文件内容的格式有要求,首先得是 shell 脚本,还得指定在 chkconfig 里的运行级别,而且还得有 description 描述
- chkconfig --del 命令可以删除 chkconfig 里的服务
3. systemd管理服务
讲义
• systemctl list-units --all --type=service
• 几个常用的服务相关的命令
• systemctl enable crond.service //让服务开机启动
• systemctl disable crond //不让开机启动
• systemctl status crond //查看状态
• systemctl stop crond //停止服务
• systemctl start crond //启动服务
• systemctl restart crond //重启服务
• systemctl is-enabled crond //检查服务是否开机启动
- systemd 是 CentOS7 的一个服务管理机制,systemctl list-unit-files 命令可以查看所有的服务
- systemctl list-units --all --type=service 命令仅仅查看 service,这样显得没那么乱
按空格键可以往下翻页
- 让服务开机启动
[root@sc ~]# systemctl enable crond.service
- 禁止服务开机启动
[root@sc ~]# systemctl disable crond
Removed symlink /etc/systemd/system/multi-user.target.wants/crond.service.
[root@sc ~]#
- 查看服务状态
- 检查服务是否开机启动
[root@sc ~]# systemctl is-enabled crond
enabled
[root@sc ~]# systemctl disable crond
Removed symlink /etc/systemd/system/multi-user.target.wants/crond.service.
[root@sc ~]# systemctl is-enabled crond
disabled
- 设置服务开机启动时会有此服务配置文件路径的信息,这个路径是一个软链接,而这个配置文件的真正路径是 /usr/lib/systemd/system/crond.service.
- 如果是设置为禁止服务开机启动的话,也会有一个信息,这个信息是把那个软链接删除了的信息
4. unit介绍
讲义
• ls /usr/lib/systemd/system //系统所有unit,分为以下类型
• service 系统服务
• target 多个unit组成的组
• device 硬件设备
• mount 文件系统挂载点
• automount 自动挂载点
• path 文件或路径
• scope 不是由systemd启动的外部进程
• 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 list-units --type=service//列出状态为active的service
• systemctl is-active crond.service //查看某个服务是否为active
- 系统的所有 unit 都在 /usr/lib/systemd/system/ 路径下
- target 是由多个 unit 、service 组成的一个组,在 CentOS7 里也有类似于 CentOS6 的运行级别,不同级别的 target 对应着不同的级别的运行模式
- 列出正在运行的 unit
[root@sc system]# systemctl list-units
- 列出所有,包括失败的或者 inactive 的 unit
[root@sc system]# systemctl list-units --all
- 列出 inactive 的 unit
[root@sc system]# systemctl list-units --all --state=inactive
- 列出状态为 active 的 service
[root@sc system]# systemctl list-units --type=service
- 查看某个服务是否为 active 或 inactive,并且查看某个服务是否为 enable 或 disable
[root@sc system]# systemctl is-active crond.service
active
[root@sc system]# systemctl is-enabled crond.service
disabled
[root@sc system]#
5. target介绍
讲义
•系统为了方便管理用target来管理unit
• systemctl list-unit-files --type=target
• systemctl list-dependencies multi-user.target //查看指定target下面有哪些unit
• systemctl get-default //查看系统默认的target
• systemctl set-default multi-user.target
• 一个service属于一种类型的unit
• 多个unit组成了一个target
• 一个target里面包含了多个service
• cat /usr/lib/systemd/system/sshd.service //看[install]部分
target 是由多个 unit、service 组成的一个组,相当于 unit、service 的一个集合,但是 target 下也可以包含 target
- 列出系统里所有的 target
[root@sc ~]# systemctl list-unit-files --type=target
- 查看指定 target 下面有哪些 unit、servic,例如我要查看 multi-user.target 下面的 unit、servic
[root@sc ~]# systemctl list-dependencies multi-user.target
- 查看系统默认的 target
[root@sc ~]# systemctl get-default
multi-user.target
- 设置默认的 target ,会创建一个软链接
[root@sc ~]# systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
- 想要查看某个 servic 属于哪个 target 的话,cat 那个 service 的文件内容看 Install 部分就知道了,例如我要查看 sshd.service 属于哪个 target