首页 > 系统相关 >linux系统开机systemctl自动启动项目服务

linux系统开机systemctl自动启动项目服务

时间:2024-01-26 15:00:33浏览次数:26  
标签:服务 target service 启动 nginx systemctl linux 开机

前言

作为一名开发人员,都会懂一些服务器相关知识。对于项目部署时,自动启动应该是最基本的,之前都是使用inid来进行开机服务。而今systemctl服务逐渐取代前者。本篇简单记录一下systemctl服务的一些配置以及命令。

一、关于systemctl命令

 下面以nginx服务为例

    systemctl enable nginx.service  #开启开机自启动
   systemctl disable nginx.service #停止开机自启动 
   systemctl start nginx.service   #启动 nginx 服务 
   systemctl stop nginx.service    #停止 nginx 服务 
   systemctl restart nginx.service #重启 nginx 服务 
   systemctl status nginx.service  #查看服务当前状态
   systemctl list-units --type=service  #查看所有已启动的服务 
   systemctl list-unit-files |grep nginx #查看是否正确启动    

   sudo systemctl daemon-reload #刷新配置system目录

  

二、相关配置

  下面 nginx.service 文件配置,复制到 /etc/systemd/system  或者 /usr/lib/systemd/system 目录下

  

  [Unit]
  Description=nginx - high performance web server
  After=network.target remote-fs.target nss-lookup.target
 
  [Service]
  Type=forking
  ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
  ExecReload=/usr/local/nginx/sbin/nginx -s reload
  ExecStop=/usr/local/nginx/sbin/nginx -s stop
 
  [Install]
  WantedBy=multi-user.target

 
  [Unit]

  Description:对该服务的描述;
  Documention:说明文档;
  Before:在a.service服务启动前,启动本服务;
  After:在b.target服务组启动后,再启动本服务;
  Wants:弱依赖于c.service,即使被依赖服务启动失败或停止,本服务仍然运行;
  Requires:强依赖于d.service,如果被依赖服务启动失败或停止,本服务也会停止。
  

  [Service]

  EnvironmentFile:服务的参数文件,形成$OPTIONS;
  ExecStart: 服务启动命令
  ExecReload: 服务重启命令
  ExecStop: 服务停止命令
  Type:服务启动类型。默认simple表示ExecStart为主进程,notify类似于simple,启动结束后会发出通知信号。另外还有forking,oneshot,dbus,idle等类型;
  KillMode:服务停止类型,默认control-group停止时杀死所有子进程,process只杀主进程,none只停止服务,不杀进程;
  Restart:服务重启类型,默认no不重启,on-success正常退出时重启,on-failure非正常退出时重启,还有always,on-abnormal,on-abort等;
  RestartSec:间隔多久重启服务。

  [Install]

  WantedBy:服务所在的服务组。

 

三、其他项目的配置

  java项目配置(若需要配置jvm可以参考最后的链接,里面有涉及environment的配置)

  

  [Unit]
  Description=java 8083 project
  After=network.target remote-fs.target nss-lookup.target

  [Service]
  Type=forking
  ExecStart=/bin/bash -c "nohup java -jar /tool/jar/qtz.jar > /tool/jar/xxx.log 2>&1 &"
  ExecStop=/bin/kill -s QUIT $MAINPID

  [Install]
  WantedBy=multi-user.target

  

  node项目配置

  [Unit]
  Description=node 8003 project
  After=network.target remote-fs.target nss-lookup.target

  [Service]
  Type=forking
  ExecStart=/bin/bash -c "nohup node /tool/node/main.js > /tool/node/xxx.log 2>&1 &"
  ExecStop=/bin/kill -s QUIT $MAINPID

  [Install]
  WantedBy=multi-user.target

 

四、一些问题

   报错service start operation timed out. Terminating ,这个错误大致意思 ‘命令执行超时终止’。以下是解决方式

  解决这个问题,借助“bash -c”,bash -c的作用时将一个长字符串当作一条完整的命令来执行,如果在脚本路径后面加上后台运行符号(&),

  脚本将就会在后台运行,不会一直处于挂起状态,systemd也就不会一直等待脚本执行完成了。经过测试,可以解决该问题。

  将

ExecStart=/usr/share/elasticsearch/bin/systemd-entrypoint -p ${PID_DIR}/elasticsearch.pid --quiet

  修改为

ExecStart=/bin/bash -c "/usr/share/elasticsearch/bin/systemd-entrypoint -p ${PID_DIR}/elasticsearch.pid --quiet &"

 

参考资料

https://blog.51cto.com/u_16213367/7366081            # linux node.js 项目 自启动

https://blog.csdn.net/baidu_37359582/article/details/124367500     # initd、service、systemd,systemctl的区别与关系

https://blog.csdn.net/qq_41035283/article/details/122793745     # Ubuntu:systemd的.service服务文件配置

https://blog.csdn.net/sinat_28371057/article/details/113012352     # linux 使用systemctl 设置java进程开机启动,管理springboot开机进程

https://blog.csdn.net/weixin_46564680/article/details/115369090     # elasticsearch service start operation timed out. Terminating.报错问题处理

https://blog.csdn.net/weixin_39992480/article/details/102761989     #springboot自启动脚本shell、systemctl以及service文件Environment用法

https://blog.csdn.net/cike626/article/details/122630521          #systemd 启动脚本时的问题


标签:服务,target,service,启动,nginx,systemctl,linux,开机
From: https://www.cnblogs.com/zrl66/p/17988380

相关文章

  • 在Linux Ubuntu系统中部署C++环境与Visual Studio Code软件
      本文介绍在LinuxUbuntu操作系统下,配置VisualStudioCode软件与C++代码开发环境的方法。  在文章VMware虚拟机部署LinuxUbuntu系统的方法中,我们介绍了LinuxUbuntu操作系统的下载、安装方法;本文则基于前述基础,继续介绍在LinuxUbuntu操作系统中配置VisualStudioCode软......
  • Linux磁盘动态扩容
    添加磁盘磁盘分区查看机器所挂硬盘个数及分区情况fdisk-l对磁盘进行分区fdisk/dev/sdc增加一个新的分区列出分区表指定分区类型检查分区信息后保存退出扩容查看物理卷创建物理卷查看卷组vgdisplay将磁盘分区加入到卷组vgextendcentos/dev/sdc1......
  • Linux图形栈概述
    Linux图形栈概述图形渲染相关概念https://www.x.org/wiki/Development/Documentation/Glossary/直接渲染架构DRIDRI(DirectRenderingInfrastructure):是现代Linux上的图形栈架构,允许用户态程序直接向图形硬件发出命令,主要用途是为OpenGL的Mesa提供硬件加速。零拷贝零拷......
  • 你不知道的Linux shell操作
    LinuxShell脚本入门教程LinuxShell脚本是一种强大的工具,它允许您自动化日常任务和复杂操作。在本教程中,我们将逐步介绍几个实用的Shell脚本示例。每个示例都将详细说明,以便即使是初学者也能轻松理解和应用。1.基础Shell脚本示例1:"HelloWorld"每个编程学习之旅都......
  • NOI Linux 下 Geany 配置教程
    没有括号补全?现在有自动括号补全了!红色的a.cpp的意思是a.cpp没有保存。现在来设置编译运行的快捷键。不难推测"%e"是可执行文件的意思,"%f"是源文件的意思,即默认命令等价于g++-Wall-oaa.cpp。在后面加上想要的编译参数:其他都不怎么要改,直接确定即可。......
  • Linux 系统安装的基本操作
    Linux基本安装方法 centos6.4 这里为大家介绍Linux的安装,安装步骤比较繁琐,现在其实云服务器挺普遍的,价格也便宜,如果自己不想搭建,也可以直接买一台学习用用,参考各大云服务器比较。本次以centos6.4为例。 centos下载地址:可以去官网下载最新版本:https://www.cento......
  • Linux系统目录结构和相对绝对路径
     1.系统的目录结构:在WIN系统中,查看文件先进入相应的磁盘,然后进入文件目录,WIN中,有多个磁盘C:\ D:\ E:\ Linux只有一个根目录 使用tree命令查看Linux目录结构,这个命令默认是没有安装的 根下得目录作用说明:2.绝对路径和相对路径:路径:在我......
  • Arch(Manjaro) Linux Pacman 命令详解
    参考Wiki:https://wiki.archlinuxcn.org/zh-hans/Pacmanyay命令参考:HerePacman是一个软件包管理器,作为ArchLinux发行版的一部分。简单来说,就是和apt-get之于Ubuntu一样,pacman就是Arch的apt-get。要想轻松玩转Arch,学会pacman是必需的。Pacman包管理器是ArchLinux的一大亮点。......
  • Linux30个常用基本命令
    1、cd命令功能说明:切换目录。举例:却换到根目录:cd/2、ls命令功能说明:列出目录内容。举例:列出/var目录的文件和目录的信息:ls–l/var;最常用方式ls–ltr3、cat命令功能说明:查看小文件内容。举例:查看test.txt文件内容:cattest.txt4、chmod命令功能说明:修改文......
  • 其他设备唤醒Linux系统的S3或者S4
    如果你的键盘可以唤醒,但是鼠标去不能cat/proc/acpi/wakeup DeviceS-stateStatusSysfsnodeGP18 S4 *disabledSIO1 S3 *disabledpnp:00:03GPP0 S4 *enabledpci:0000:00:01.1GPP1 S4 *disabledGPP2 S4 *disabledGPP4 S4 *enabledpci:0000:00:02.2GPP5 ......