• Centos / Ubuntu 自启动服务 - 测试记录 - 杂记


    1. 启动服务文件创建位置

    Ubuntu18.04的改动

    sudo systemctl start XXX.service
    
    • 1

    systemctl service服务文件夹在/lib/systemd/system(基本服务文件夹)与/etc/systemd/system(开机启动文件夹)。
    添加基本服务,可以在/lib/systemd/system下创建 XXX.service,当然 /etc/systemd/system 目录也是可以的。


    2. 不同操作系统 sh 文件格式报错

    问题关键的是在win10系统内创建文本,然后修改它的后缀为sh文件,看起来是没问题,但是一旦你拉到Linux过去,将它作为一个shell文件使用,shell终端会报203错误,
    没有解释器指向(#!/bin/sh),但其实不是这个问题,是文件有问题,你应该在Linux系统内创建一个shell文件,然后将脚本代码复制过去,而不是在Windows系统创建shell文件
    而且不要自作聪明,以为在Linux里面创建好shell文件后,在拖到Windows系统里,然后在拖到其他的Linux系统里,这看似没问题,但实际使用时依旧会报203错误

    我认为应该是系统格式问题,Linux——>Windows——>Linux 中间Windows系统格式把Linux的系统格式给改变了


    3. sh 文件格式问题解释

    主要原因是test.sh是我在windows下编辑然后上传到linux系统里执行的。
    .sh文件的格式为dos格式。
    linux只能执行格式为unix格式的脚本。因为在dos/window下按一次回车键实际上输入的是“回车(CR)”和“换行(LF)”,
    而Linux/unix下按一次回车键只输入“换行(LF)”,所以修改的sh文件在每行都会多了一个CR,所以Linux下运行时就会报错找不到命令。
    我们可以通过vi编辑器来查看文件的format格式。步骤如下:
    1.首先用vi命令打开文件

    [root@localhost test]# vi test.sh   
    
    • 1

    2.在vi命令模式中使用 :set ff 命令
    可以看到改文件的格式为
    复制代码 代码如下:

    fileformat=dos
    
    • 1

    3.修改文件formatunix
    使用 vi/vim 修改文件格式 format
    命令::set ff=unix
    或者::set fileformat=unix

    然后:wq保存退出就可以了


    还有Linux系统只需要前面表明解释器的代码,如shell文件是 #!/bin/sh
    所以文件后缀是.sh 其实没什么,有没有加sh后缀,只是为了看起来方便而已,重点是解释器指向,即文件内有没 #!/bin/sh,或者不加 #!/bin/sh 也可以,反正都是在 shell 终端运行,自然是用 shell 解释器运行文件

    最后shell文件内的py脚本运行文件记得加权限
    chmod a+x xxx.py

    4. /etc/systemd/system/xxx.service 服务文件配置

    Type=forking 多数服务会在启动后放入后台,systemd通过Type=forking来支持这种工作方式。
    如果启用该项,建议同时设置PIDFile选项,这样可以帮助systemd更准确的定位到服务进程
    PrivateTmp 保证一定的安全性 true
    TimeoutStopSec 超时停止10s
    Restart 在意外退出时重启 on-failure
    RestartSec 重启间隔 5s
    Alias 服务别名

    service文件内容如下:


    [Unit]                                                                       
    Description=XXX Service
    
    [Service]
    #用户一般是 root 用户
    User=root 
    
    Type=forking
    
    #该服务进程具体的shell执行文件,xxx 是文件名,不是文件夹名,我这里是将shell文件添加到/usr/sbin路径下,记得为shell文件配置权限 chmod a+x   service文件不需要
    
    
    ExecStart=/usr/sbin/XXX 
    ExecReload=/usr/sbin/XXX 
    ExecStop=/usr/sbin/XXX 
    PrivateTmp=true
    #以下这些不用改,照旧就行
    SuccessExitStatus=143
    TimeoutStopSec=10
    Restart=on-failure
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
    Alias=XXX.service
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    弄好了上面的配置之后运行如下命令让服务生效,有的时候需要重启电脑才能生效,这是很多教程没提到的情况!

    sudo systemctl daemon-reload
    
    • 1

    重载后运行

    sudo systemctl start mycat.service
    
    • 1

    如果想加到开机启动,就运行

    sudo systemctl enable XXX.service
    
    • 1

    上面这条命令是建立软连接,默认建立硬链接,除非加参数才是软连接
    这个时候系统会自动加载mycat.service/etc/systemd/system文件夹下,
    很多教程直接自己链接过去,不推荐那么干,因为有的自己链接会出现未知的错误,
    很难找到原因,容易翻车


    Centos service配置文件如下

    [Unit]                                                                       
    Description=XXX Service
    
    [Service]
    #用户一般是 root 用户
    User=root 
    
    Type=forking
    
    #该服务进程具体的shell执行文件,xxx 是文件名,
    #不是文件夹名,我这里是将shell文件添加到/usr/sbin路径下,
    #记得为shell文件配置权限 chmod a+x   service文件不需要
    
    ExecStart=/usr/sbin/XXX start
    ExecReload=/usr/sbin/XXX restart
    ExecStop=/usr/sbin/XXX stop
    PrivateTmp=true
    #以下这些不用改,照旧就行
    SuccessExitStatus=143
    TimeoutStopSec=10
    Restart=on-failure
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
    Alias=XXX.service
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    Centos、Ubuntu服务启动命令:

    systemctl start XXX.service
    
    • 1
    systemctl stop XXX.service
    
    • 1
    systemctl restart XXX.service
    
    • 1

    或者

    service xxx start 
    
    • 1
    service xxx stop
    
    • 1
    service xxx restart
    
    • 1
  • 相关阅读:
    【c ++ primer 笔记】第15章 面向对象程序设计
    抖音店铺提供优质服务|成都瀚网科技
    不是吧,还有人连Java最强大的技术之一:反射还没搞懂?赶紧码住
    批量调整视频饱和度和色度,提升你的视频剪辑效率!
    Java设计模式——策略模式
    YOLO目标检测——烟叶病害检测数据集下载分享【含对应voc、coco和yolo三种格式标签】
    IDEA的使用(一) (IntelliJ IDEA 2022.1.3版本)
    试从多个方面比较电路交换、报文交换和分组交换的主要优缺点?
    用最少的代码模拟gRPC四种消息交换模式
    数说故事×北拓资本:AI场景应用与商业模式分析
  • 原文地址:https://blog.csdn.net/qq_42701659/article/details/127549382