编写开机启动服务

centos 7.x编写开机启动服务

centos 7以上是用Systemd进行系统初始化的,Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度。关于Systemd的详情介绍在这里

Systemd服务文件以.service结尾,比如现在要建立nginx为开机启动,如果用yum install命令安装的,yum命令会自动创建nginx.service文件,直接用命令

1

systemcel enable nginx.service

设置开机启动即可。
在这里我是用源码编译安装的,所以要手动创建nginx.service服务文件。
开机没有登陆情况下就能运行的程序,存在系统服务(system)里,即:

 

1

/lib/systemd/system/

1.在系统服务目录里创建nginx.service文件

 

1

vim /lib/systemd/system/nginx.service

内容如下

 

1

2

3

4

5

6

7

8

9

10

11

12

13

[Unit]

Description=nginx

After=network.target

 

[Service]

Type=forking

ExecStart=/usr/local/nginx/sbin/nginx

ExecReload=/usr/local/nginx/sbin/nginx -s reload

ExecStop=/usr/local/nginx/sbin/nginx -s quit

PrivateTmp=true

 

[Install]

WantedBy=multi-user.target

[Unit]:服务的说明
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3

保存退出。

2.设置开机启动

 

1

systemctl enable nginx.service

3.其它命令
启动nginx服务

 

1

systemctl start nginx.service

设置开机自启动

 

1

systemctl enable nginx.service

停止开机自启动

 

1

systemctl disable nginx.service

查看服务当前状态

 

1

systemctl status nginx.service

重新启动服务

 

1

systemctl restart nginx.service

查看所有已启动的服务

 

1

systemctl list-units --type=service

4.Systemd 命令和 sysvinit 命令的对照表

Sysvinit 命令Systemd 命令备注
service foo startsystemctl start foo.service用来启动一个服务 (并不会重启现有的)
service foo stopsystemctl stop foo.service用来停止一个服务 (并不会重启现有的)。
service foo restartsystemctl restart foo.service用来停止并启动一个服务。
service foo reloadsystemctl reload foo.service当支持时,重新装载配置文件而不中断等待操作。
service foo condrestartsystemctl condrestart foo.service如果服务正在运行那么重启它。
service foo statussystemctl status foo.service汇报服务是否正在运行。
ls /etc/rc.d/init.d/systemctl list-unit-files –type=service用来列出可以启动或停止的服务列表。
chkconfig foo onsystemctl enable foo.service在下次启动时或满足其他触发条件时设置服务为启用
chkconfig foo offsystemctl disable foo.service在下次启动时或满足其他触发条件时设置服务为禁用
chkconfig foosystemctl is-enabled foo.service用来检查一个服务在当前环境下被配置为启用还是禁用。
chkconfig –listsystemctl list-unit-files –type=service输出在各个运行级别下服务的启用和禁用情况
chkconfig foo –listls /etc/systemd/system/*.wants/foo.service用来列出该服务在哪些运行级别下启用和禁用。
chkconfig foo –addsystemctl daemon-reload当您创建新服务文件或者变更设置时使用。
telinit 3systemctl isolate multi-user.target (OR systemctl isolate runlevel3.target OR telinit 3)改变至多用户运行级别。

5.Sysvinit 运行级别和 systemd 目标的对应表

Sysvinit 运行级别Systemd 目标备注
0runlevel0.target, poweroff.target关闭系统。
1, s, singlerunlevel1.target, rescue.target单用户模式。
2, 4runlevel2.target, runlevel4.target, multi-user.target用户定义/域特定运行级别。默认等同于 3。
3runlevel3.target, multi-user.target多用户,非图形化。用户可以通过多个控制台或网络登录。
5runlevel5.target, graphical.target多用户,图形化。通常为所有运行级别 3 的服务外加图形化登录。
6runlevel6.target, reboot.target重启
emergencyemergency.target紧急 Shell

报错处理:

①systemctl自定义service执行shell脚本时报错code exited status 203 EXEC

原因:

systemctl执行脚本时需要知道脚本的解释器

解决方法:

在/home/root/configip.sh脚本的开头加上#!/bin/sh

#!/bin/sh

ifconfig eth0 192.168.2.10

echo "ifconfig eth0 192.168.2.10"

目前来说,这个解析头有好几种写法 比如 # !/usr/bin sh 可以正常运行,但是systemctl 不行

② 执行的时候总是有些脚本启动有些问题,后来经查看是系统下文件的权限问题

chown -R user. 文件夹

因为程序是以普通用户启动,要日志文件的权限是普通用户可读,切记。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值