gaoxt / blog

A personal archive exercise that includes some common Docker environment architectures.
1 stars 2 forks source link

systemd 常用指令和配置实例 #7

Open gaoxt opened 7 years ago

gaoxt commented 7 years ago

systemd

在想着把一个脚本文件作为开机启动时候,放到/etc/rc.d/rc.local下reboot后发现并没有启动,发现/etc/rc.d/rc.local注释里写的很明白,要么给rc.local增加chmod -x 的权限用于引导时执行,要么推荐使用systemd或udev规则。

Systemd是一个系统的第一个进程,用于集中管理和配置init。 而Sytemctl主要负责控制Systemd系统和服务管理。

常用命令

systemctl list-unit-files --type=service #列出所有服务
systemctl status nginx.service #检查nginx服务状态
systemctl start/restart/stop/reload/status nginx.service #启动、重启、停止、重载、检查nginx服务
systemctl enable/disable nginx.service #自动启动、禁止启动nginx服务
systemctl daemon-reload #更新.service配置到系统
systemctl kill nginx #杀死nginx服务
systemctl show nginx #查看nginx配置细节

系统命令

whereis systemd/systemctl #检查二进制文件和库文件的安装位置
ps -eaf | grep systemd # 检查systemd是否运行
systemctl --version #查看systemd版本
systemd-analyze blame #分析启动各个进程耗时
systemd-cgls #按等级列出控制组
systemd-cgtop #按CPU、内存、输入和输出列出控制组
systemctl rescue #启动系统救援模式
systemctl emergency #进入紧急模式
systemctl get-default #列出当前使用的运行等级
systemctl isolate runlevel5.target/graphical.target #启动运行等级5,即图形模式
systemctl isolate runlevel3.target/multiuser.target #启动运行等级3,即多用户模式(命令行)
systemctl set-default runlevel3.target #设置多用户模式为默认运行等级
systemctl reboot/halt/suspend/hibernate/hybrid-sleep  #重启、停止、挂起、休眠系统或使系统进入混合睡眠

单元命令

systemd-analyze #分析启动进程
systemd-analyze critical-chain #分析启动时关键链,Systemctl接受服务(.service),挂载点(.mount),套接口(.socket)和设备(.device)作为单元。
systemctl show -p CPUShares nginx.service #查看nginx服务CPU分配额,默认1024
systemctl set-property nginx.service CPUShares=2048 #将nginx服务CPU分配额设置2048
systemd-analyze critical-chain nginx.service #分析nginx服务关键链
systemctl list-dependencies nginx.service #获取nginx依赖性列表
systemctl list-units #列出运行中的单元
systemctl --failed #列出失败的单元
systemctl list-unit-files #列出可用单元状态
systemctl list-unit-files --type=service/mount/socket/device   #列出可用的系统套接字/挂载点
systemctl start/stop/restart/reload/status *.service/*.socket/*.mount/*.device #常用操作
systemctl mask/unmask *.socket/*.mount/*.service/*.device #注销/取消注销  
systemctl is-enabled *.socket/*.mount/*.service/*.device #检查是否启动
systemctl is-active *.socket/*.mount/*.service/*.device #检查是否活跃的
systemctl enable/disable *.socket/*.mount/*.service/*.device #自动启动、禁止启动

新增自己的systemd服务

# vi my-init.service

[Unit]
Description=my-init service
After=network.target

[Service]
Type=oneshot
ExecStart=/bin/bash /etc/rc.d/init.d/init.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

# mv my-init.service /usr/lib/systemd/system/
# systemctl enable my-init.service
# reboot
# ps:init.sh脚本文件里面执行路径必须是绝对路径

新增一个shadowsocke启动服务

[Unit]
Description=Shadowsocks Server
After=network.target

[Service]
Type=forking
PIDFile=/run/ssserver.pid
ExecStart=/usr/bin/ssserver -c /etc/shadowsocks.json --pid-file /run/ssserver.pid  -d start
Restart=on-abort

[Install]
WantedBy=multi-user.target
运行等级 个人理解
0 为停机,机器关闭
1 为单用户模式,救援维护模式,就像Win9x 下的安全模式类似
2 为多用户模式,但是没有NFS 支持
3 为完整的多用户模式,是标准的运行级
4 一般不用,在一些特殊情况下可以用它来做一些事情,例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些设置
5 就是 X11 ,进到 X Window 系统了
6 为重启,运行 init 6 机器就会重启

参考

systemd简体中文wiki systemctl 命令完全指南 编写systemd脚本