5

我在 linux(Redhat Server Edition 5.1) 上编写了一项服务。它由 shell 脚本启动,如果我启动我的应用程序我手动启动我的服务,现在我想在启动时启动我的服务,这意味着我将我的服务放在我的守护进程 init.d 文件夹中,而不是在启动时调用,有人知道如何在 linux 上启动守护进程吗?

这是我的示例,但无法正常工作

#!/bin/sh
#
# myservice     This shell script takes care of starting and stopping
#               the <myservice>
#

# Source function library
. /etc/rc.d/init.d/functions


# Do preliminary checks here, if any
#### START of preliminary checks #########


##### END of preliminary checks #######


# Handle manual control parameters like start, stop, status, restart, etc.

case "$1" in
  start)
    # Start daemons.

    echo -n $"Starting <myservice> daemon: "
    echo
    daemon <myservice>
    echo
    ;;

  stop)
    # Stop daemons.
    echo -n $"Shutting down <myservice>: "
    killproc <myservice>
    echo

    # Do clean-up works here like removing pid files from /var/run, etc.
    ;;
  status)
    status <myservice>

    ;;
  restart)
    $0 stop
    $0 start
    ;;

  *)
    echo $"Usage: $0 {start|stop|status|restart}"
    exit 1
esac

exit 0
4

4 回答 4

4

在脚本中添加 2 条评论:

# chkconfig: - 90 10
# description: description of your service

以 root 身份运行:

chkconfig --add my_service
于 2012-08-01T11:57:57.657 回答
3

一个基本的 unix 守护进程执行以下操作:

fork
close all filedescriptors (stdout,stderr, etc)
chdir /
signal handeling (sighup, sigterm etc)
while
do stuff
sleep(xx)
done

(C 中的示例:daemon.c)

关于如何安装启动脚本的 Red Hat 示例:

要在 redhat 系统启动时启动守护进程,您需要一个 init 脚本。它应该放在 /etc/init.d

初始化脚本示例:

代码:

# chkconfig: 3 99 1
# description: my daemon

case "$1" in
'start')
/usr/local/bin/mydaemon
;;

'stop')
pkill mydaemon
;;

'restart')
pkill -HUP mydaemon
;;

esac

第一行将告诉 chkconfig 在运行级别 3 中以优先级 99 启动守护进程,并在服务器关闭时将其作为优先级 1 终止。

要安装启动脚本,请使用以下命令: chkconfig --add ./scriptabove 现在它将在服务器启动时启动。

立即启动它使用:服务启动

如果您想了解更多详细信息,请访问链接

希望这会有所帮助!

于 2012-08-01T12:08:23.587 回答
0

不同的 linux 发行版包括不同的服务管理工具。你应该看看launchdOpenRC(出现在 Gentoo 上)和SystemD(例如在 Arch 上)

希望这可以帮助 :)

于 2012-08-01T11:55:31.537 回答
0

chkconfig --add your_service_name

于 2012-08-01T11:55:36.857 回答