CentOS 7 添加开机启动服务/脚本

一. 添加开机启动服务

  1. 创建后缀名为 service 的配置文件,比如创建文件 test.service,文件内容如下:

    [Unit]
    Description=Test
    After=network.target
    [Service]
    Type=simple
    User=nobody
    Restart=on-failure
    RestartSec=5s
    TimeoutStartSec=0
    ExecStart=/usr/local/test
    [Install]
    WantedBy=multi-user.target

    常用参数释义:

    • After-依赖关系,表示在网络启动后启动本服务
      如何处理依赖关系:
      使用 systemd 时,可通过正确编写单元配置文件来解决其依赖关系。典型的情况是,单元 A 要求单元 B 在 A 启动之前运行。在此情况下,向单元 A 配置文件中的 [Unit] 段添加 Requires=BAfter=B 即可。若此依赖关系是可选的,可添加 Wants=BAfter=B 。请注意 Wants=Requires= 并不意味着 After= ,即如果 After= 选项没有制定,这两个单元将被并行启动。

      依赖关系通常被用在服务(service)而不是目标(target)上。例如, network.target 一般会被某个配置网络接口的服务引入,所以,将自定义的单元排在该服务之后即可,因为 network.target 已经启动。
    • Type-类型
      Type=simple(默认值) systemd认为该服务将立即启动。服务进程不会 fork 。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket 激活型。
      Type=forking :systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便 systemd 能够跟踪服务的主进程。
      Type=oneshot :这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
      Type=notify :与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。
      Type=dbus :若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。
      Type=idle :systemd会等待所有任务处理完成后,才开始执行 idle 类型的单元。其他行为与 Type=simple 类似。
    • ExecStart-启动服务的命令行,包括执行文件路径和程序参数等。
    • WantedBy-给哪个用户组安装此服务
      multi-user.target 终端用户

      graphical.target 桌面用户

      default.target 默认用户
  2. 将刚才创建的配置文件放在
    /usr/lib/systemd/system 用户软件包安装目录

    /etc/systemd/system/ 系统管理员安装目录

  3. 执行如下命令安装服务:

    systemctl enable test.service       #安装服务
    systemctl start test.service        #启动服务
    systemctl daemon-reload             #重新加载

二. 添加开机启动脚本

  1. 将脚本移动到/etc/rc.d/init.d目录下

    mv test.sh /etc/rc.d/init.d
  2. 增加脚本的可执行权限

    chmod +x /etc/rc.d/init.d/test.sh
  3. 添加脚本到开机自动启动项目中

    cd /etc/rc.d/init.d
    chkconfig --add test.sh
    chkconfig test.sh

注意:
你直接把你的平时写的加的脚本这样 chkconfig --add 肯定是要报 service test.sh does not support chkconfig 错误的,不过你只需要在 test.sh 脚本开头 #!/bin/bash 下面加上如下内容就行。

#chkconfig: 345 88 14           #345 代表权限

三.添加开机启动脚本(二)

上面的方法在很多情况下都可能会出现与预期不一致的行为问题,所以小C还是建议以Centos官方建议的方式来实现开机启动脚本:

  1. 新建your_startup.service文件
    # touch /usr/lib/systemd/system/your_startup.service
  2. 编辑your_startup.service文件
    # vim /usr/lib/systemd/system/your_startup.service
  3. 增加如下内容,保存并退出
    [Unit]
    Description=start your_startup service
    Requires=graphical.target
    After=graphical.target
    [Service]
    Type=forking
    User=root
    Group=root
    Restart=always
    TimeoutSec=5
    IgnoreSIGPIPE=no
    KillMode=process
    GuessMainPID=no
    RemainAfterExit=no
    ExecStart=/etc/rc.d/init.d/your_startup.sh
    [Install]
    WantedBy=graphical.target
  4. your_startup.sh启动脚本增加执行权限
    # chmod 755 /etc/rc.d/init.d/your_startup.sh
  5. 配置开机启动
    # systemctl enable /usr/lib/systemd/system/your_startup.service
  6. 重启
    # reboot
  7. 查看 your_startup.sh 是否成功启动?
5 1 vote
喜欢就给个好评吧!
赞(0) 打赏
未经允许不得转载:爱易默博客 » CentOS 7 添加开机启动服务/脚本
Subscribe
提醒
guest
0 评论
Inline Feedbacks
View all comments
免责声明:本站大部分下载资源收集于网络,只做学习和交流使用,版权归原作者所有,请在下载后24小时之内自觉删除,若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,与本站无关。本站发布的内容若侵犯到您的权益,请联系站长删除,我们将及时处理! Disclaimer: Most of the download resources on this site are collected on the Internet, and are only used for learning and communication. The copyright belongs to the original author. Please consciously delete within 24 hours after downloading. If you use it for commercial purposes, please purchase the original version. If the content posted on this site violates your rights, please contact us to delete it, and we will deal with it in time!

联系我们 Contact us

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

0
Would love your thoughts, please comment.x
()
x