zoukankan      html  css  js  c++  java
  • CentOS 7下关于systemd的一些唠叨话二:systemd服务脚本的编写

    CentOS 7继承了RHEL 7的新的特性,例如强大的systemd,而systemd的使用也使得以往系统服务的/etc/init.d的启动脚本的方式就此改变,也大幅提高了系统服务的运行效率。但服务的配置和以往也发生了极大的不同,说实在的,变的简单而易用了许多。

    systemd:

        CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,即:/usr/lib/systemd/system ,/usr/lib/systemd/user

        每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install],就以nginx为例吧,具体内容如下:

    创建service:

    在/usr/lib/systemd/system下创建nginx.service文件内容如下(看应用需求也可以在 /usr/lib/systemd/usr下创建):
    [Unit]
    Description=nginx
    Documentation=http://nginx.org/en/docs/
    After=network.target  remote-fs.target nss-lookup.target
    
    [Service]
    Type=forking
    PIDFile=/usr/local/nginx/logs/nginx.pid
    ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /etc/nginx/nginx.conf
    ExecStart=/usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf
    ExecReload=/usr/bin/kill -s HUP $MAINPID
    ExecStop=/usr/bin/kill -s QUIT $MAINPID
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target

    [Unit]

    Description : 服务的简单描述
    Documentation : 服务文档

    After= : 依赖,仅当依赖的服务启动之后再启动自定义的服务单元

    [Service]

    Type : 启动类型simple、forking、oneshot、notify、dbus

    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认为服务就绪。

    PIDFile : pid文件路径,对应程序的,比如nginx默认就放在logs目录下
    ExecStartPre :启动前要做什么,上文中是测试配置文件 -t  
    ExecStart:启动 
    ExecReload:重载 
    ExecStop:停止 

    PrivateTmp:True表示给服务分配独立的临时空间

    [Install]

    WantedBy:服务安装的用户模式,从字面上看,就是想要使用这个服务的有是谁?上文中使用的是:multi-user.target ,就是指想要使用这个服务的目录是多用户。「以上全是个人理解,瞎猜的,如有不当,请大家多多指教」每一个.target实际上是链接到我们单位文件的集合,当我们执行:

     #systemctl enable nginx.service

    就会在/etc/systemd/system/multi-user.target.wants/目录下新建一个/usr/lib/systemd/system/nginx.service 文件的链接。

    操作Service:

    #启动服务
    $ systemctl start nginx.service
     
    #查看日志
    $ journalctl -f -u nginx.service
    [root@localhost ~]# journalctl -f -u nginx.service
    -- Logs begin at 一 2015-11-16 14:47:18 CST. --
    11月 16 14:47:38 localhost.localdomain systemd[1]: Starting nginx...
    11月 16 14:47:39 localhost.localdomain nginx[907]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    11月 16 14:47:39 localhost.localdomain nginx[907]: nginx: configuration file /etc/nginx/nginx.conf test is successful
    11月 16 14:47:40 localhost.localdomain systemd[1]: Failed to read PID from file /usr/local/nginx/logs/nginx.pid: Invalid...ument
    11月 16 14:47:40 localhost.localdomain systemd[1]: Started nginx.
    
    
     
    #重启
    $ systemctl restart nginx.service
     
    #重载
    $ systemctl reload nginx.service
     
    #停止
    $ systemctl stop nginx.service
  • 相关阅读:
    第三天 moyax
    mkfs.ext3 option
    write file to stroage trigger kernel warning
    download fomat install rootfs script
    custom usb-seriel udev relus for compatible usb-seriel devices using kermit
    Wifi Troughput Test using iperf
    learning uboot switch to standby system using button
    learning uboot support web http function in qca4531 cpu
    learngin uboot design parameter recovery mechanism
    learning uboot auto switch to stanbdy system in qca4531 cpu
  • 原文地址:https://www.cnblogs.com/sysk/p/4969368.html
Copyright © 2011-2022 走看看