【问题标题】:Linux daemon waiting for a socket connection等待套接字连接的 Linux 守护进程
【发布时间】:2012-10-19 14:42:58
【问题描述】:

我想创建一个简单的 Linux 守护进程...

  • 在 localhost 和指定端口上打开一个 tcp/ip 服务器套接字
  • 等待连接
  • 有人连接后,会从客户端的socket中读取第一行(以\n结尾)
  • 如果该行是foo,它将运行命令bar
  • bar 命令完成后(或者如果该行不是foo),守护程序将等待另一个连接并执行相同的操作(无限循环)...

可以用 bash 来写吗? (以及如何?)

另外,我希望能够使用service my-foobar-daemon start / stop(在 Ubuntu 上)启动和停止脚本,我该怎么做?

谢谢:)

【问题讨论】:

  • inetd 将为您完成大部分工作,根据您的具体要求,有多种口味可供调查。

标签: bash sockets daemon


【解决方案1】:

以下sn-p使用bashnc实现需求:

#! /bin/bash
while true; do
    coproc nc -l -p 8080
    if read -u "${COPROC[0]}" line; then
        case "$line" in
            foo)
                bar
                ;;
            *)
                echo "$line: unknown command" >&2
                ;;
        esac
    fi
    kill "$COPROC_PID"
    wait "$COPROC_PID"
done

【讨论】:

  • 我用coproc在第一行之后关闭了连接。如果客户端在一行之后就关闭了连接,脚本会简单很多——并且不需要coproc
【解决方案2】:
#! /bin/bash
coproc nc -l -p 8080
while true; do
    if read -u "${COPROC[0]}" line; then
        case "$line" in
            foo)
                bar
                break
                ;;
            *)
                echo "$line: unknown command" >&2
                ;;
        esac
    fi
done
kill "$COPROC_PID"

【讨论】:

    猜你喜欢
    • 2017-05-14
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    相关资源
    最近更新 更多