zoukankan      html  css  js  c++  java
  • centos6 自启动任务

    tag: init upstart centos6.x 自启动 initctl event

    CentOS6开始转用Upstart代替以往的init.d/rcX.d的线性启动方式。
    upstart的概念就不科普了,简单介绍下:
    upstart可以在以下情况startstop服务:
    1.runlevel改变时
    2.收到事件时
    3.startup,shutdown

    在这之前先介绍下initctl。initctl可以做什么?

    man initctl 可以看到:管理员可以使用initctl对upstart init deamon进行操作。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    [root@aaaaa ~]# initctl help
    Job commands:
      start                       Start job.
      stop                        Stop job.
      restart                     Restart job.
      reload                      Send HUP signal to job.
      status                      Query status of job.
      list                        List known jobs.
      
    Event commands:
      emit                        Emit an event.
      
    Other commands:
      reload-configuration        Reload the configuration of the init daemon.
      version                     Request the version of the init daemon.
      log-priority                Change the minimum priority of log messages from the init daemon
      usage                       Show job usage message if available.
      help                        display list of commands
      
    For more information on a command, try `initctl COMMAND --help'.

    我常用的主要是启动、停止、重启、list。

    下面使用initctl list看看又哪些任务在运行。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    [root@aaaa ~]# initctl list
    mcu start/running, process 1639
    rc stop/waiting
    tty (/dev/tty3) start/running, process 3123
    tty (/dev/tty2) start/running, process 3121
    tty (/dev/tty6) start/running, process 3129
    tty (/dev/tty5) start/running, process 3127
    tty (/dev/tty4) start/running, process 3125
    plymouth-shutdown stop/waiting
    control-alt-delete stop/waiting
    rcS-emergency stop/waiting
    readahead-collector stop/waiting
    kexec-disable stop/waiting
    quit-plymouth stop/waiting
    rcS stop/waiting
    prefdm start/running, process 3116
    init-system-dbus stop/waiting
    readahead stop/waiting
    splash-manager stop/waiting
    start-ttys stop/waiting
    readahead-disable-services stop/waiting
    rcS-sulogin stop/waiting
    serial stop/waiting


    举个例子:mcu start/running, process 1639
    可以看到mcu这个任务处于start并且running状态,并且进程号是1639.


    那如何做一个自启动呢?了解完上面之后,下面就很简单了。

    1
    2
    3
    4
    5
    [root@aaaaa ~]# cd /etc/init
    [root@aaaaa init]# ls
    control-alt-delete.conf  mcu.conf                quit-plymouth.conf  rcS-emergency.conf        readahead.conf                   splash-manager.conf
    init-system-dbus.conf    plymouth-shutdown.conf  rc.conf             rcS-sulogin.conf          readahead-disable-services.conf  start-ttys.conf
    kexec-disable.conf       prefdm.conf             rcS.conf            readahead-collector.conf  serial.conf                      tty.conf

    在/etc/init下可以看到有很多 .conf文件,每一个conf都是一个任务。
    我们只要在这里添加一个conf,就可以注册一个任务。
    下面的例子,我希望在runlevel为2345的时候,确保/tmp/test.sh一直在执行。
    那么conf这样写:

    1
    2
    3
    4
    5
    6
    7
    [root@aaaaa init]# cat mcu.conf
    start on runlevel 2
    start on runlevel 3
    start on runlevel 4
    start on runlevel 5
    respawn
    exec /tmp/test.sh

    解释:
    respawn 是让任务反复启动
    exec可以用来执行文件,如果要在conf里面写脚本,可以使用script...end script格式,这里就不做举例了。

    到这里,就已经写好了conf。你可以使用initctl reload-configuration来重新加载任务。然后在initctl list中查看任务,是否mcu已经添加进去了。
    如果没有添加进去,请检查conf中是否有语法错误。

    如果添加进去了,任务应该是stop的状态,那么可以使用initctl start mcu来启动任务。
    但是这样似乎有点麻烦,就把以上的都做成一个脚本吧:

    1
    2
    3
    4
    5
    6
    #!/bin/bash
    echo -e "start on runlevel 2 start on runlevel 3 start on runlevel 4 start on runlevel 5 respawn exec /tmp/test.sh" > /etc/init/mcu.conf
      
    initctl reload-configuration
    initctl list
    initctl start mcu

    执行脚本,就完成了添加conf和启动任务的操作。 


    以上只是一个简单的conf例子,如果想要在更多条件下启动、停止等等各种操作,可以参考man。
    前面说到了initctl可以发送event,让任务启动,conf这样写:

    1
    2
    3
    4
    start on evsolohac
    script
    echo “solohac~~~~~” >>/tmp/solohac.txt
    end script

    让这个任务启动的命令如下:
     

    1
    initctl emit evsolohac
  • 相关阅读:
    leetcode 5414 收藏清单
    leetcode 714 买卖股票的最佳时机含手续费(dp)
    春招的一个记录
    leetcode 560 和为k的子数组(前缀和 + map)
    机器学习--激活函数篇
    leetcode 回文链表(O(1)空间复杂度)
    Leetcode 659 分割数组为连续子序列 (贪心)
    论文笔记:MeLU: Meta-Learned User Preference Estimator for Cold-Start Recommendation
    jni.h头文件详解一
    JNI笔记
  • 原文地址:https://www.cnblogs.com/solohac/p/4154181.html
Copyright © 2011-2022 走看看