linux脚本与netcat在x小时后停止工作
发布时间:2020-12-13 19:40:53  所属栏目:Linux  来源:网络整理 
            导读:我必须要脚本: #!/bin/bashnetcat -lk -p 12345 | while read linedo match=$(echo $line | grep -c 'Keep-Alive') if [ $match -eq 1 ]; then [start a command] fidone 和 #!/bin/bashnetcat -lk -p 12346 | while read linedo match=$(echo $line | grep
                
                
                
            | 
                         我必须要脚本: 
  
  
  
#!/bin/bash
netcat -lk -p 12345 | while read line
do
    match=$(echo $line | grep -c 'Keep-Alive')
    if [ $match -eq 1 ]; then
        [start a command]
    fi
done 
 和 #!/bin/bash
netcat -lk -p 12346 | while read line
do
    match=$(echo $line | grep -c 'Keep-Alive')
    if [ $match -eq 1 ]; then
        [start a command]
    fi
done 
 我把这两个脚本放在’/etc/init.d/’ 当我重新启动我的Linux机器(RasbPi)时,这两个脚本都可以正常工作. 我已经尝试了20次,他们继续工作正常. 但大约12个小时后,整个系统停止工作.我已经注册了一些登录,但似乎这些脚本不再起作用了.但是当我 ps aux 我可以看到脚本仍在运行: root 1686 0.0 0.2 2740 1184 ? S Aug12 0:00 /bin/bash /etc/init.d/script1.sh start root 1689 0.0 0.1 2268 512 ? S Aug12 0:00 netcat -lk 12345 root 1690 0.0 0.1 2744 784 ? S Aug12 0:00 /bin/bash /etc/init.d/script1.sh start root 1691 0.0 0.2 2740 1184 ? S Aug12 0:00 /bin/bash /etc/init.d/script2.sh start root 1694 0.0 0.1 2268 512 ? S Aug12 0:00 netcat -lk 12346 root 1695 0.0 0.1 2744 784 ? S Aug12 0:00 /bin/bash /etc/init.d/script2.sh start 重新启动后,他们再次开始工作…但这是一个罪,定期重新启动一台Linux机器… 我已经插入了一些登录,这是结果; Listening on [0.0.0.0] (family 0,port 12345) [2013-08-14 11:55:00] Starting loop. [2013-08-14 11:55:00] Starting netcat. netcat: Address already in use [2013-08-14 11:55:00] Netcat has stopped or crashed. [2013-08-14 11:49:52] Starting loop. [2013-08-14 11:49:52] Starting netcat. Listening on [0.0.0.0] (family 0,port 12345) Connection from [16.8.94.19] port 12345 [tcp/*] accepted (family 2,sport 6333) Connection closed,listening again. Connection from [16.8.94.19] port 12345 [tcp/*] accepted (family 2,sport 6334) [2013-08-14 12:40:02] Starting loop. [2013-08-14 12:40:02] Starting netcat. netcat: Address already in use [2013-08-14 12:40:02] Netcat has stopped or crashed. [2013-08-14 12:17:16] Starting loop. [2013-08-14 12:17:16] Starting netcat. Listening on [0.0.0.0] (family 0,sport 6387) Connection closed,sport 6388) [2013-08-14 13:10:08] Starting loop. [2013-08-14 13:10:08] Starting netcat. netcat: Address already in use [2013-08-14 13:10:08] Netcat has stopped or crashed. [2013-08-14 12:17:16] Starting loop. [2013-08-14 12:17:16] Starting netcat. Listening on [0.0.0.0] (family 0,sport 6167) Connection closed,sport 6168) 谢谢 解决方法
 如果您的命令(包括netcat)都没有读取stdin的输入,您可以完全使其独立于终端运行.有时,依赖于终端的后台进程会在后台读取输入时暂停(S).实际上,由于你运行一个守护进程,你应该确保没有一个命令读取它的输入(终端). 
  
  
  
        #!/bin/bash
set +o monitor # Make sure job control is disabled.
(
    : # Make sure the shell runs a subshell.
    exec netcat -lk -p 12345 | while read line  ## Use exec to overwrite the subshell.
    do
        match=$(echo $line | grep -c 'Keep-Alive')
        if [ $match -eq 1 ]; then
            [start a command]
        fi
    done
) <&- >&- 2>&- </dev/null &>/dev/null &
TASKPID=$!
sleep 1s ## Let the task initialize a bit before we disown it.
disown "$TASKPID" 
 而且我想我们可以再试一次记录: set +o monitor
(
    echo "[$(date "+%F %T")] Starting loop with PID $BASHPID."
    for (( ;; ))
    do
        echo "[$(date "+%F %T")] Starting netcat."
        netcat -vv -lk -p 12345 | while read line
        do
            match=$(echo "$line" | grep -c 'Keep-Alive')
            if [ "$match" -eq 1 ]; then
                [start a command]
            fi
        done
        echo "[$(date "+%F %T")] Netcat has stopped or crashed."
        sleep 4s
    done
) <&- >&- 2>&- </dev/null >> "/var/log/something.log" 2>&1 &
TASKPID=$!
sleep 1s
disown "$TASKPID"
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!  | 
                  
