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 是否成功启动?
0 0 vote
喜欢就给个好评吧!
赞(0) 打赏
未经允许不得转载:爱易默博客 » CentOS 7 添加开机启动服务/脚本
Subscribe
提醒
guest
0 评论
Inline Feedbacks
View all comments
免责声明:本站大部分下载资源收集于网络,只做学习和交流使用,版权归原作者所有,请在下载后24小时之内自觉删除,若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,与本站无关。本站发布的内容若侵犯到您的权益,请联系站长删除,我们将及时处理!

联系我们

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

支付宝扫一扫打赏

微信扫一扫打赏

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