在CentOS 7上利用systemctl加入自己定义系统服务
转载
原文地址:https://www.cnblogs.com/bhlsheji/p/4082718.html
CentOS 7继承了RHEL 7的新的特性,比如强大的systemctl,而systemctl的使用也使得以往系统服务的/etc/init.d的启动脚本的方式就此改变,也大幅提高了系统服务的执行效率。但服务的配置和以往也发生了极大的不同,说实在的,变的简单而易用了很多。
以下我们以利用forever来实现Node.js项目自启动为例,初探CentOS 7的systemctl。
前提:Node.js环境已配置成功,forever包成功安装,有一个能跑的Node.js程序。
CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,像须要开机不登陆就能执行的程序,还是存在系统服务里吧,即:/usr/lib/systemd/system文件夹下
每个服务以.service结尾,通常会分为3部分:[Unit]、[Service]和[Install],我写的这个服务用于开机执行Node.js项目,详细内容例如以下:
[Unit] Description=xiyoulibapi After=network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/node.js/pid ExecStart=/usr/local/bin/forever start /node.js/xiyoulib/bin/www ExecReload=/usr/local/bin/forever restart /node.js/xiyoulib/bin/www ExecStop=/usr/local/bin/forever stop /node.js/xiyoulib/bin/www PrivateTmp=true [Install] WantedBy=multi-user.target
[Unit]部分主要是对这个服务的说明,内容包含Description和After,Description用于描写叙述服务,After用于描写叙述服务类别
[Service]部分是服务的关键,是服务的一些详细执行參数的设置,这里Type=forking是后台执行的形式,PIDFile为存放PID的文件路径,ExecStart为服务的详细执行命令,ExecReload为重新启动命令,ExecStop为停止命令,PrivateTmp=True表示给服务分配独立的暂时空间,注意:[Service]部分的启动、重新启动、停止命令所有要求使用绝对路径,使用相对路径则会报错!
[Install]部分是服务安装的相关设置,可设置为多用户的
服务脚本依照上面编写完毕后,以754的权限保存在/usr/lib/systemd/system文件夹下,这时就能够利用systemctl进行配置了
首先,使用systemctl start [服务名(也是文件名称)]可測试服务能否够成功执行,假设不能执行则能够使用systemctl status [服务名(也是文件名称)]查看错误信息和其它服务信息,然后依据报错进行改动,直到能够start,假设不放心还能够測试restart和stop命令。
接着,仅仅要使用systemctl enable xxxxx就能够将所编写的服务加入至开机启动就可以。
我的脚本编写方法參照了nginx的编写方法,也能够依据其它功能类似的程序。
这样看来,尽管systemctl比較陌生,可是事实上比init.d那种方式简单不少,并且使用简单,systemctl能简化的操作还有非常多,如今也有不少的资料,看来RHEL/CentOS比其它的Linux发行版还是比較先进的,此次更新也最终舍弃了Linux 2.6内核,不管是速度还是稳定性都提升不少。
##########################################################################
原文地址:https://www.jianshu.com/p/e59ed9c8dbf3
systemd 存在于centos7, ubuntu15.04以上的版本, 所以如果大家的系统版本比较低, 就不能使用这种方式
1. 创建配置文件
cd /etc/systemd/system
vi myproject.service
#########################################
[Unit]
Description=node simple server
[Service]
ExecStart=/usr/bin/node /mnt/node_src/myproject/index.js
Restart=always
User=nobody
Group=nobody
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/mnt/node_src/myproject/
[Install]
WantedBy=multi-user.target
#########################################
ExecStart: 指定执行命令的路径及项目的文件Restart: 是否重启, 从而保证挂了可以自动启动User/Group: 执行的用户和用户组, 也可以使用数字标记Environment: 环境变量WorkingDirectory: 工作目录
2. 保存配置并启动
# 重载配置文件
sudo systemctl daemon-reload
# 启动服务
sudo systemctl start myproject
# 查看服务状态
systemctl status myproject
3. 如果想设为开机启动
sudo systemctl enable myproject
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号