目录
Linux服务并设置开机自启动
通过制作Linux服务的方式启动,并设置开机启动。
(1)制作服务
在/etc/systemd/system/路径下创建redis.service文件
vim /etc/systemd/system/redis.service
写入如下内容:
[Unit]
Description=redis - start up automatically !
After=network.target
[Service]
Type=forking
ExecStart=cd /home/environment/redis-6.2.7 && ./redis-server ./conf/redis.conf
ExecReload=cd /home/environment/redis-6.2.7 && ./redis-server -s reload ./conf/redis.conf
ExecStop=cd /home/environment/redis-6.2.7 && ./redis-server -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
保存并退出 -> :wq
使用/bin/bash -c 命令
/bin/bash -c 命令表示后面的参数将会作为字符串读入作为执行的命令
[Unit]
Description=Redis - 自启动 !
After=network.target
[Service]
Type=forking
ExecStart=/bin/bash -c 'cd /home/environment/redis-6.2.7 && ./redis-server ./6379/redis.conf'
ExecStop=/bin/bash -c 'cd /home/environment/redis-6.2.7 && ./redis-cli -p 6379 -a 123456 shutdown'
ExecReload=/bin/bash -c 'cd /home/environment/redis-6.2.7 && ./redis-server -s reload ./6379/redis.conf'
PrivateTmp=true
[Install]
WantedBy=multi-user.target
修改权限
chmod +x redis.service
[Unit] -> 服务的说明
服务 | 说明 |
---|---|
Description | 对该服务的描述 |
Documention | 说明文档 |
Before | 在a.service服务启动前,启动本服务 |
After | 在b.target服务组启动后,再启动本服务 |
Wants | 弱依赖于c.service,即使被依赖服务启动失败或停止,本服务仍然运行 |
Requires | 强依赖于d.service,如果被依赖服务启动失败或停止,本服务也会停止 |
[Service] -> 服务运行参数的设置
多数配置项可不配置,ExecStart一般要自行设置
服务 | 说明 |
---|---|
EnvironmentFile | 服务的参数文件,形成$OPTIONS |
Type | 服务启动类型。默认simple表示ExecStart为主进程 simple:默认值,执行ExecStart指定的命令,启动主进程 forking:(后台运行)以 fork 方式从父进程创建子进程,创建后父进程会立即退出 oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行 dbus:当前服务通过D-Bus启动 notify:当前服务启动完毕,会通知Systemd,再继续往下执行 idle:若有其他任务执行完毕,当前服务才会运行 |
KillMode | 服务停止类型,默认control-group停止时杀死所有子进程,process只杀主进程,none只停止服务,不杀进程 |
ExecStart,ExecStop | 启动命令组,分别是服务启动时,停止时,重启时,启动前,启动后,停止后执行的命令 |
Restart | 服务重启类型,默认no不重启,on-success正常退出时重启,on-failure非正常退出时重启,还有always,on-abnormal,on-abort等 |
ExecReload | 重载命令 |
RestartSec | 间隔多久重启服务 比如: 某次异常后,等待5(s)再进行启动,默认值0.1(s) |
StartLimitInterval | 重启次数。默认是10秒内如果重启超过5次则不再重启,设置为0表示不限次数重启 |
PrivateTmp | 服务分配独立的临时空间 |
RestartSec=5: : 无限次重启,
[Install] -> 运行级别下服务安装的相关设置
可设置为多用户,即系统运行级别为3;即把服务放在哪个服务组
服务 | 说明 |
---|---|
WantedBy | multi-user.target |
multi-user.target服务组中的服务,在systemctl enable xxx.service后,符号链接被放在/etc/systemd/system/multi-user.target.wants/目录下。而系统默认启动的Target可由systemctl get-defaults得到:
systemctl get-defaults
graphical.target
graphical.target又以multi-user.target为Requires和After关系,因此开机将自启动multi-user.target服务组;此外,.target文件用于配置服务组,但只有Unit字段
注意:[Service] 的启动、重启、停止命令全部要求使用绝对路径
(2)设置开机自启动
命令 | 描述 |
---|---|
systemctl daemon-reload | 重新加载所有的service服务 |
systemctl enable [service] | 设置开机启动 |
systemctl disable [service] | 取消开机启动 |
systemctl start [service] | 启动服务 |
systemctl stop [service] | 停止服务 |
systemctl restart [service] | 重启服务 |
systemctl status [service] | 查看服务当前状态 |
systemctl is-active [service] | 仅显示是否Active |
systemctl list-units --type=service | 显示全部已经启动的服务 |
chmod 777 [service] 添加可执行权限
注意:在更新完[service]后,要重启服务的配置文件:systemctl daemon-reload
查看:systemctl list-unit-files
命令格式:systemctl [command] [unit]
命令[command] | 描述 |
---|---|
start | 立刻启动后面接的 unit |
stop | 立刻关闭后面接的 unit |
restart | 立刻关闭后启动后面接的 unit,亦即执行 stop 再 start 的意思 |
reload | 不关闭 unit 的情况下,重新载入配置文件,让设置生效 |
enable | 设置下次开机时,后面接的 unit 会被启动 |
disable | 设置下次开机时,后面接的 unit 不会被启动 |
status | 目前后面接的这个 unit 的状态,会列出有没有正在执行、开机时是否启动等信息 |
is-active | 目前有没有正在运行中 |
is-enabled | 开机时有没有默认要启用这个 unit |
kill | 不要被 kill 这个名字吓着了,它其实是向运行 unit 的进程发送信号 |
show | 列出 unit 的配置 |
mask | 注销 unit,注销后你就无法启动这个 unit 了 |
unmask | 取消对 unit 的注销 |
(3)配置防护墙
Redis需要配置 bind 0.0.0.0 不会限制IP地址
命令 | 描述 |
---|---|
systemctl start firewalld.service | 开启防火墙 |
systemctl stop firewalld.service | 关闭防火墙 |
systemctl disable firewalld.service | 禁用防火墙 |
systemctl mask firewalld | 锁定防火墙 |
systemctl unmask firewalld | 解锁防火墙 |
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl mask firewalld
firewall-cmd命令
参数 | 描述 |
---|---|
–zone | 作用域 |
–add-port=6379/tcp | 添加端口,格式为:端口/通讯协议 |
–permanent | 永久生效,没有此参数重启后失效 |
开放指定端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --zone=public --add-port=3306/tcp --permanent
重启防火墙
firewall-cmd --reload
(4)查看端口号
命令 | 描述 |
---|---|
netstat -ntlp | 查看当前所有tcp端口 |
netstat -ntulp | grep 6379 |
system 日志查看
#查看整个日志
journalctl
#查看 mytimer.timer 的日志
journalctl -u mytimer.timer
#查看 mytimer.timer 和 mytimer.service 的日志
journalctl -u mytimer
#从结尾开始查看最新日志
journalctl -f
#从结尾开始查看 mytimer.timer 的日志
journalctl -f -u timer.timer
systemctl 命令
常用命令
systemctl #范列出系统上面有启动的unit
systemctl list-units --all # 列出所有unit,包括inactive状态的
systemctl list-unit-files #列出所有已经安装的unit有哪些
systemctl list-units --all --state=inactive # 列出所有未运行的unit,即状态是inactive的
systemctl list-units --type=service --all #列出类型为service的所有项目,不论启动与否
systemctl get-default #输入目前机器默认的模式,如图形界面模式或者文本模式
systemctl isolate multi-user.target #将目前的操作环境改为纯文本模式,关掉图形界面
systemctl isolate graphical.target #将目前的操作环境改为图形界面
systemctlpoweroff #系统关机
systemctl reboot #重新开机
systemctl suspend #进入暂停模式
systemctl rescue #强制进入救援模式
systemctl hibernate #进入休眠模式
systemctl emergency #强制进入紧急救援模式
systemctl list-dependencies --reverse #查询当前默认的target关联了啥
systemctl list-dependencies graphical.target #查询图形界面模式的target关联了啥
systemctl list-sockets #查看当前的socket服务
systemctl show etcd.service #查看 unit 的详细配置情况
systemctl mask etcd.service #禁用某个服务
systemctl unmask etcd.service #解除禁用某个服务
查看服务
#查询服务状态
systemctl status firewalld
#添加或修改配置文件后,需要重新加载
systemctl daemon-reload
#服务是否在运行
systemctl is-active firewalld
#启动、停止服务
systemctl start/stop firewalld
#是否开机自启
systemctl is-enabled firewalld
#开机自启、禁止
systemctl enable/disable firewalld
#注销和取消注销服务
systemctl mask/unmark cups
定时器相关命令
systemctl list-timers # 查看所有正在运行的定时器
systemctl start/stop mytimer.timer # 启动/停止定时器
systemctl status mytimer.timer # 查看定时器状态
systemctl enable/disable myscript.timer # 开机自启、取消自启
Timer字段说明:
OnActiveSec:定时器生效后,多少时间开始执行任务
OnBootSec:系统启动后,多少时间开始执行任务
OnStartupSec:Systemd 进程启动后,多少时间开始执行任务
OnUnitActiveSec:该单元上次执行后,等多少时间再次执行
OnUnitInactiveSec: 定时器上次关闭后多少时间,再次执行
OnCalendar:基于绝对时间,而不是相对时间执行
AccuracySec:如果因为各种原因,任务必须推迟执行,推迟的最大秒数,默认是60秒
Unit:真正要执行的任务,默认是同名的带有.service后缀的单元
Persistent:如果设置了该字段,即使定时器到时没有启动,也会自动执行相应的单元
WakeSystem:如果系统休眠,是否自动唤醒系统