如何创建一个简单的脚本来终止 uhttpd,然后启动 lig​​httpd?

如何创建一个简单的脚本来终止 uhttpd,然后启动 lig​​httpd?

我有一个默认运行的路由器uhttpd,并且有一个进程使用lighttpd“我想运行”。由于两个进程共享相同的端口,我想杀死uhttpd然后自动启动lighttpd(通过将包含命令的脚本设置为cron重新启动时运行的作业)。

当我运行命令时,我想单独进入脚本,它们起作用了。当我将它们放入脚本中时,我收到一条错误消息,告诉我端口号正在使用中。命令是:

killall uhttpd

/etc/init.d/lighttpd start

到目前为止我的简单脚本是:

#!/bin/sh
killall uhttpd
sleep 5 #To give the device time to release the port
/etc/init.d/lighttpd start

答案1

我不会等待 5 秒并希望这会起作用,你可能会等待太久或太短。您可以用来nc -z测试端口是否(仍在)被使用,并执行以下操作(我假设他们正在“争夺”端口 80):

#!/bin/bash

for i in $(seq 5); do
  if ! nc -z localhost 80; then
      break
  fi
  echo $i
  sleep 1
done

if nc -z localhost 80; then
    killall -9 uhttpd
    sleep 1
fi

if ! nc -z localhost 80; then
    /etc/init.d/lighttpd start
else
    echo 'port not free'
fi

如果等待 5 次后进程仍未被杀死,请更强力地将其踢出,并且仅在端口空闲时启动 lig​​httpd。

您应该调查是否有东西正在重新启动 uhttpd(例如首先启动它的进程)。也许您正在使用的留下了足够的时间来重新启动(例如,在运行脚本之前和之后sleep 5查看进程号)。uhttpd

相关内容