8

我有这个脚本:

#!/bin/sh
while [ true ] ; do
    urlfile=$( ls /root/wget/wget-download-link.txt | head -n 1 )
    dir=$( cat /root/wget/wget-dir.txt )
    if [ "$urlfile" = "" ] ; then
        sleep 30
        continue
    fi

    url=$( head -n 1 $urlfile )
    if [ "$url" = "" ] ; then
        mv $urlfile $urlfile.invalid
        continue
    fi

    mv $urlfile $urlfile.busy
    wget -b $url -P $dir -o /www/wget.log -c -t 100 -nc
    mv $urlfile.busy $urlfile.done
done

该脚本基本上wget-download-link.txt每 30 秒检查一次是否有任何新 URL,如果有新 URL,它将使用 wget 下载它,问题是当我尝试像这样在 Putty 上运行此脚本时

/root/wget/wget_download.sh --daemon

它仍在前台运行,我仍然可以看到终端输出。如何让它在后台运行?

4

9 回答 9

14

在 OpenWRT 中,默认情况下既不可用nohup也不screen可用,因此只有内置命令的解决方案是用括号启动一个子 shell,并将其放在后台&

(/root/wget/wget_download.sh >/dev/null 2>&1 )&

您可以在桌面上轻松测试此结构,例如

(notify-send one && sleep 15 && notify-send two)&

...然后在这 15 秒结束之前关闭控制台,您将看到括号中的命令在关闭控制台后继续执行。

于 2016-10-02T21:49:04.033 回答
2

以下命令也将起作用:

((/root/wget/wget_download.sh)&)&

这样您就不必在用于 OpenWrt 的路由器的紧凑内存空间中安装“nohub”命令。

几年前我在某个地方发现了这个。有用。

于 2015-10-17T21:21:33.437 回答
1

&脚本末尾的应该足够了,如果您看到脚本的输出,则意味着该和stdout/或未stderr关闭,或未重定向到/dev/null

你可以使用这个答案:

如何将所有输出重定向到 /dev/null

于 2014-12-24T10:03:48.903 回答
1

我正在使用 openwrt merlin,让它工作的唯一方法是使用 crud cron manager[1]。Nohub 和 screen 不能作为解决方案。

cru a pinggw "0 * * * * /bin/ping -c 10 -q 192.168.2.254"

像魅力一样工作

[1][ https://www.cyberciti.biz/faq/how-to-add-cron-job-on-asuswrt-merlin-wifi-router/]

于 2019-01-10T20:30:18.513 回答
1

https://openwrt.org/packages/pkgdata/coreutils-nohup

opkg update
opkg install coreutils-nohup
nohup yourscript.sh &
于 2019-08-21T13:28:39.400 回答
0

您可以使用nohup.

nohup yourscript.sh

或者

nohup yourscript.sh &

即使您关闭 putty 会话,您的脚本仍将继续运行,并且所有输出都将写入同一目录中的文本文件。

nohup 通常与 nice 命令结合使用,以较低优先级运行进程。

nohup nice yourscript.sh &

见:http ://en.wikipedia.org/wiki/Nohup

于 2014-12-24T09:49:06.467 回答
0

对于 Openwrt Merlin 系统中的 busybox,我得到了一个更好的解决方案,它结合了 cru 和 date 命令

cru a YOUR_UNIQUE_CRON_NAME "`date -D '%s' +'%M %H %d %m *' -d $(( \`date +%s\`+2*60 ))` YOUR_CMD_HERE"

它添加了一个 2 分钟后运行的 cron 作业,并且只运行一次。

灵感来自 PlagTag 的想法。

于 2020-05-18T15:21:38.897 回答
0

以另一种方式,这些代码会尝试:

ssh admin@192.168.1.1 "/jffs/your_script.sh &"

简单,没有任何程序,如 nohup screen...
(顺便说一句:使用 Asus-Merlin 固件)

于 2022-02-12T14:07:13.880 回答
-4

尝试这个:

 nohup /root/wget/wget_download.sh >/dev/null 2>&1 &

它将进入后台,因此当您关闭 Putty 会话时,它仍将运行,并且不会向终端发送消息。

于 2014-12-24T09:39:46.940 回答