【问题标题】:Simply or Alias running a command with nohupSimply 或 Alias 使用 nohup 运行命令
【发布时间】:2018-06-12 23:05:52
【问题描述】:

我有一些长时间运行的进程,我使用 nohup 运行并将任何输出重定向到日志。由于我通常喜欢直接监控,至少在开始时,我也添加了一个尾巴。这最终看起来像这样。

nohup myprocess.sh >> 20180611.log 2>&1 & tail -f 20180611.log

并不是说这很复杂,但我希望我能找到一种方法为其创建别名。我可能可以使用包装脚本来做到这一点,但我不想让每个进程基本上使用两个脚本来弄乱目录(因此我想到了一个别名)。谢谢!

【问题讨论】:

  • 别名是当它是命令的第一个单词时被其他东西(命令的较长片段)替换的单词。它不能接受论据。但是,您可以编写一个 shell 函数(在您的 .bashrc 中)来执行您想要的处理(并将进程名称和日志文件作为参数传递)。
  • 这里不是真正的主题,但您可能对像screen 这样的终端多路复用器感兴趣,你们中有长时间运行的东西要管理并希望在它完成之前注销。 nohup 是 70 年代穷人对此的解决方案。对于许多用例,现在已经有了更好的东西。

标签: linux bash nohup


【解决方案1】:

别名是当它是命令的第一个单词时被其他东西(命令的较长片段)替换的单词。它不能接受论据。

但是,您可以编写一个 shell 函数(在您的 .bashrc 中)来执行您想要的处理(并将进程名称和日志文件作为参数传递)。

它可能看起来像这样(.bashrc):

function no-hup() {
    nohup "$1" >> "$2" 2>&1 & tail -f "$2"
}
export -f 'no-hup'

你这样运行它:

no-hup myprocess.sh 20180611.log

【讨论】:

  • 这很方便,但如果我仍在传递参数,它并不能真正提供我想要的简化。我的希望就像“process1”一样,它会在我的问题中使用别名/启动完整命令。
  • 如果您总是想运行myprocess.sh 并将其输出放在20180611.log 中,那么您可以简单地将这些值硬编码到函数体中。或者你可以把它写成别名:alias foo="nohup myprocess.sh >> 20180611.log 2>&1 & tail -f 20180611.log"
  • 我还建议添加disown,以便在shell退出时进程可以不间断地运行:no-hup() { nohup command &>> file & disown; tail -f file; }
  • 相对于tail -f,我更喜欢less +GF file:您可以使用Ctrl+C 来停止拖尾,但可以使用更少的命令来浏览/搜索文件。要再次开始拖尾,请使用“G”转到文件末尾,使用“F”开始跟踪。
  • @axiac 该过程将被硬编码,但日志文件将设置为当前日期。我想我可以把它放在那个函数中。
猜你喜欢
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 2012-12-18
  • 2020-12-15
  • 1970-01-01
  • 1970-01-01
  • 2022-08-23
相关资源
最近更新 更多