nohup 后台运行,以及重定向标准输出和标准错误 &/dev/null 文件

本文详细介绍了在Linux环境下如何使用nohup命令进行后台任务的执行,并解析了标准输出与标准错误的重定向方法,帮助读者更好地理解和应用这些实用技巧。
部署运行你感兴趣的模型镜像
nohup 加&大家都知道是后台运行并把stdout输出到文件nohup.out中。其实&是后台运行的命令。
具体的命令我就不介绍了,
一般都是在linux下
nohup command_line
或者
nohup command_line &
这之间的差别是带&的命令行,即使terminal关闭,或者电脑死机程序依然运行(前提是你把程序递交到服务器上);
它把标准输出(STDOUT)和标准错误(STDERR)结果输出到nohup.txt文件
这个看似很方便,但是当输出很大的时候,nohup.txt文件会非常大,或者多个后台命令的时候大家都会输出到nohup.txt文件,不利于查找结果和调试程序。
所以能够重定向输出会非常方便。
下面要介绍标准输出,标准输入 和标准错误了。
其实我门一直都在用,只是没有注意到,
比如
>./command.sh > output
#这其中的>就是标准输出符号,其实是 1>output的缩写
>./command.sh 2> output
#这里的2>就是将标准错误输出到output文件里。
而0< 则是标准输入了。
下面步入正题,重定向后台命令
>nohup ./command.sh > output2>&1 &
解释:前面的nohup 和后面的&我想大家都能明白了把。
主要是中间的 2>&1的意思
这个意思是把标准错误(2)重定向到标准输出中(1),而标准输出又导入文件output里面,
所以结果是标准错误和标准输出都导入文件output里面了。
至于为什么需要将标准错误重定向到标准输出的原因,那就归结为标准错误没有缓冲区,而stdout有。
这就会导致 >output 2>output文件output被两次打开,而stdout和stderr将会竞争覆盖,这肯定不是我门想要的.
这就是为什么有人会写成:
nohup ./command.sh >output2>output出错的原因了

##########################
最后谈一下/dev/null文件的作用
这是一个无底洞,任何东西都可以定向到这里,但是却无法打开。
所以一般很大的stdou和stderr当你不关心的时候可以利用stdout和stderr定向到这里
>./command.sh >/dev/null2>&1

好,就到这里,enjoy youself!!!

您可能感兴趣的与本文相关的镜像

LobeChat

LobeChat

AI应用

LobeChat 是一个开源、高性能的聊天机器人框架。支持语音合成、多模态和可扩展插件系统。支持一键式免费部署私人ChatGPT/LLM 网络应用程序。

&lt;think&gt;好的,我现在需要帮用户解决关于Shell脚本后台运行重定向日志到/dev/null的问题。首先,我得理解用户的具体需求。用户可能有一个脚本,想要在后台运行,同时不希望日志输出干扰当前终端或占用存储空间。他们可能对Shell的基本操作有一定了解,但需要更高级的技巧。 首先,我应该回顾一下Shell中后台运行的方法。通常使用&amp;符号可以让命令在后台执行。但用户还提到日志重定向,特别是到/dev/null。这里需要解释标准输出标准错误重定向。/dev/null是一个特殊的设备文件,会丢弃所有写入的数据,适合用来抑制输出。 接下来,我需要考虑如何将标准输出标准错误重定向。用户可能知道使用&gt;,但可能不知道2&gt;&amp;1的用法。因此,正确的语法应该是将命令后面加上&gt; /dev/null 2&gt;&amp;1,这样两个输出流都会被丢弃。或者更简洁的写法是&amp;&gt; /dev/null,这在Bash中有效。 然后,用户可能想将这两个操作结合起来,即在后台运行的同时重定向日志。所以整个命令的结构应该是脚本名后面加上参数,如:./script.sh &gt; /dev/null 2&gt;&amp;1 &amp;。这里要注意顺序,重定向的指令要在&amp;之前,否则可能不起作用。 另外,我需要提醒用户不同的Shell可能有差异,比如Bash支持&amp;&gt;,而其他Shell可能需要更传统的写法。此外,虽然重定向到/dev/null会丢弃日志,但在生产环境中可能需要保留日志以供调试,这时候可以建议用户将输出重定向到实际的文件,而不是/dev/null。 可能用户的问题背后是想让脚本在后台静默运行,但又不希望完全失去日志。这时候可能需要权衡,或者使用日志轮转等策略。不过根据用户的问题,他们明确要求重定向到/dev/null,所以应该先按照他们的需求解答,再给出注意事项。 最后,总结步骤,先给出基本命令,再解释每个部分的作用,然后提到可能的变体注意事项。确保回答结构清晰,逐步引导用户完成操作,并指出潜在的问题,比如Shell兼容性日志丢失的风险。&lt;/think&gt;在Shell脚本中让程序后台运行重定向日志到`/dev/null`,可通过以下步骤实现: --- ### 1. **后台运行基础** 使用 `&amp;` 符号将命令放到后台执行: ```bash ./your_script.sh &amp; ``` 此时脚本会在后台运行,但标准输出(stdout)标准错误(stderr)仍会显示在终端。 --- ### 2. **重定向到`/dev/null`** `/dev/null` 是Linux中的&ldquo;黑洞&rdquo;设备,写入它的内容会被丢弃。 - **仅丢弃标准输出**: ```bash ./your_script.sh &gt; /dev/null &amp; ``` - **同时丢弃标准输出标准错误**: ```bash ./your_script.sh &gt; /dev/null 2&gt;&amp;1 &amp; ``` 或更简洁的写法(仅Bash支持): ```bash ./your_script.sh &amp;&gt; /dev/null &amp; ``` --- ### 3. **完整命令** 将脚本后台运行且完全静默: ```bash ./your_script.sh &gt; /dev/null 2&gt;&amp;1 &amp; ``` --- ### 4. **验证后台任务** - 通过 `jobs` 查看后台任务: ```bash jobs -l ``` - 通过 `ps` 确认进程: ```bash ps aux | grep your_script.sh ``` --- ### 5. **注意事项** - **Shell兼容性**:`2&gt;&amp;1` 是POSIX标准写法,`&amp;&gt;` 是Bash特有语法。 - **日志丢失风险**:`/dev/null` 会彻底丢弃日志,生产环境建议保留日志文件(例如 `&gt; output.log 2&gt;&amp;1`)。 - **脱离终端运行**:若需脚本在退出终端后仍运行,可使用 `nohup`: ```bash nohup ./your_script.sh &gt; /dev/null 2&gt;&amp;1 &amp; ``` --- ### 总结 通过 `&amp;` 实现后台运行,结合 `&gt;/dev/null 2&gt;&amp;1` 丢弃日志,是最常见的静默后台执行方式。根据需求灵活调整重定向策略即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值