2011-10-09 73 views
0

我正在創建一個守護進程。這個過程依賴於MYSQL,但是我的過程在啓動mysql之前就開始了。在啓動時mysql啓動後,如何讓我的守護進程啓動?Linux正在等待另一個守護進程啓動

我在rc.x.d文件夾中看不到任何與mysql相關的腳本,因此我可以更改編號。

我是否延遲了等待mysql加載的守護進程?

而且,我怎麼註冊的守護進程,這樣我可以做

start mydaemon 

和過程將開始?我只是得到

"start: unknown job: mydaemon" 

有什麼辦法來報告從後臺程序使用「開始」命令時,啓動是否成功了?

我使用的是Ubuntu。 這是我的啓動腳本,基於Ubuntu提供的Skeleton腳本。 我跑了以下來註冊守護進程。我知道它從消息日誌中運行@ startup。

更新的rc.d mydaemon默認

#! /bin/sh 
### BEGIN INIT INFO 
# Provides:   skeleton 
# Required-Start: $remote_fs $syslog 
# Required-Stop:  $remote_fs $syslog 
# Default-Start:  2 3 4 5 
# Default-Stop:  0 1 6 
# Short-Description: Example initscript 
# Description:  This file should be used to construct scripts to be 
#     placed in /etc/init.d. 
### END INIT INFO 

# Author: Foo Bar <[email protected]> 
# 
# Please remove the "Author" lines above and replace them 
# with your own name if you copy and modify this script. 

# Do NOT "set -e" 

# PATH should only include /usr/* if it runs after the mountnfs.sh script 
PATH=/sbin:/usr/sbin:/bin:/usr/bin 
DESC="Daemon" 
NAME=mydaemon 
DAEMON=/usr/sbin/$NAME 
DAEMON_ARGS="" 
PIDFILE=/var/run/$NAME.pid 
SCRIPTNAME=/etc/init.d/$NAME 

# Exit if the package is not installed 
[ -x "$DAEMON" ] || exit 0 

# Read configuration variable file if it is present 
[ -r /etc/default/$NAME ] && . /etc/default/$NAME 

# Load the VERBOSE setting and other rcS variables 
. /lib/init/vars.sh 

# Define LSB log_* functions. 
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present. 
. /lib/lsb/init-functions 

# 
# Function that starts the daemon/service 
# 
do_start() 
{ 
    # Return 
    # 0 if daemon has been started 
    # 1 if daemon was already running 
    # 2 if daemon could not be started 
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ 
     || return 1 
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ 
     $DAEMON_ARGS \ 
     || return 2 
    # Add code here, if necessary, that waits for the process to be ready 
    # to handle requests from services started subsequently which depend 
    # on this one. As a last resort, sleep for some time. 
} 

# 
# Function that stops the daemon/service 
# 
do_stop() 
{ 
    # Return 
    # 0 if daemon has been stopped 
    # 1 if daemon was already stopped 
    # 2 if daemon could not be stopped 
    # other if a failure occurred 
    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME 
    RETVAL="$?" 
    [ "$RETVAL" = 2 ] && return 2 

    # Wait for children to finish too if this is a daemon that forks 
    # and if the daemon is only ever run from this initscript. 
    # If the above conditions are not satisfied then add some other code 
    # that waits for the process to drop all resources that could be 
    # needed by services started subsequently. A last resort is to 
    # sleep for some time. 
    start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON 
    [ "$?" = 2 ] && return 2 
    # Many daemons don't delete their pidfiles when they exit. 
    rm -f $PIDFILE 
    return "$RETVAL" 
} 

# 
# Function that sends a SIGHUP to the daemon/service 
# 
do_reload() { 
    # 
    # If the daemon can reload its configuration without 
    # restarting (for example, when it is sent a SIGHUP), 
    # then implement that here. 
    # 
    start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME 
    return 0 
} 

case "$1" in 
    start) 
    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" 
    do_start 
    case "$?" in 
     0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 
     2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; 
    esac 
    ;; 
    stop) 
    [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" 
    do_stop 
    case "$?" in 
     0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 
     2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; 
    esac 
    ;; 
    status) 
     status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? 
     ;; 
    #reload|force-reload) 
    # 
    # If do_reload() is not implemented then leave this commented out 
    # and leave 'force-reload' as an alias for 'restart'. 
    # 
    #log_daemon_msg "Reloading $DESC" "$NAME" 
    #do_reload 
    #log_end_msg $? 
    #;; 
    restart|force-reload) 
    # 
    # If the "reload" option is implemented then remove the 
    # 'force-reload' alias 
    # 
    log_daemon_msg "Restarting $DESC" "$NAME" 
    do_stop 
    case "$?" in 
     0|1) 
     do_start 
     case "$?" in 
      0) log_end_msg 0 ;; 
      1) log_end_msg 1 ;; # Old process is still running 
      *) log_end_msg 1 ;; # Failed to start 
     esac 
     ;; 
     *) 
     # Failed to stop 
     log_end_msg 1 
     ;; 
    esac 
    ;; 
    *) 
    #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 
    echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 
    exit 3 
    ;; 
esac 

: 
+1

您的系統可能運行新貴,檢查出的文檔,HTTP://upstart.ubuntu .COM /菜譜/ – Hasturkun

回答

0

的SysV初始化系統在現代Ubuntu是傳統的支持,主要啓動系統是暴發戶,它允許您指定的MySQL的依賴。

startstop是由暴發戶系統管理守護進程控制 - 這些守護進程控制/配置文件去/etc/init