我有这个脚本:
#!/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
该脚本基本上会每隔30秒检查wget-download-link.txt
处的新网址,如果有新网址,则会使用wget下载该网址,问题是当我尝试运行此网址时Putty上的脚本就像这样
/root/wget/wget_download.sh --daemon
它仍然在前台运行,我仍然可以看到终端输出。如何让它在后台运行?
答案 0 :(得分:6)
在OpenWRT中,默认情况下既没有nohup
也没有screen
,所以只有内置命令的解决方案是使用括号启动子shell并将其放在后台{{1} }:
&
您可以在桌面上轻松测试此结构,例如
(/root/wget/wget_download.sh >/dev/null 2>&1 )&
...然后在这15秒结束之前关闭你的控制台,你会看到关闭控制台后括号中的命令继续执行。
答案 1 :(得分:2)
以下命令也可以使用:
((/root/wget/wget_download.sh)&)&
这样您就不必在用于OpenWrt的路由器的紧密内存空间中安装'nohub'命令。
几年前我在某个地方找到了这个。它有效。答案 2 :(得分:0)
您可以使用nohup
。
nohup yourscript.sh
或
nohup yourscript.sh &
即使您关闭了putty会话,您的脚本也会继续运行,并且所有输出都将写入同一目录中的文本文件。
nohup通常与nice命令结合使用,以较低优先级运行进程。
nohup nice yourscript.sh &
答案 3 :(得分:0)
脚本末尾的&
应该足够了,如果你看到脚本的输出意味着,stdout
和/或stderr
没有关闭,或者没有重定向到/dev/null
你可以使用这个答案:
答案 4 :(得分:0)
我正在使用openwrt merlin,使其正常工作的唯一方法是使用crud cron manager [1]。 Nohub和屏幕无法用作解决方案。
按下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/]
答案 5 :(得分:0)
https://openwrt.org/packages/pkgdata/coreutils-nohup
opkg update
opkg install coreutils-nohup
nohup yourscript.sh &
答案 6 :(得分: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想法的启发。
答案 7 :(得分:-4)
试试这个:
nohup /root/wget/wget_download.sh >/dev/null 2>&1 &
它将进入后台,因此当您关闭Putty会话时,它仍将继续运行,并且不会向终端发送消息。