nohup 基础使用

nohup 命令的基本语法格式为:

nohup command [arguments] &

末尾的 & 符号表示将命令放到后台运行。执行后会返回一个进程ID,同时默认在当前目录生成 nohup.out 文件用于记录输出。

输出重定向控制

默认的 nohup.out 可能不适合大数据场景,可以通过重定向优化:

nohup spark-submit job.py > /path/to/output.log 2>&1 &

这里将标准输出和错误输出都重定向到指定日志文件,避免默认文件过大问题。

进程监控与管理

使用 ps 命令检查后台任务状态:

ps -ef | grep [process_id]

终止任务时优先使用 kill 命令:

kill -9 [process_id]

结合 screen/tmux 使用

对于长时间运行的大数据任务,建议配合终端复用工具:

screen -S session_name
nohup command &
Ctrl+A D # 分离会话
screen -r session_name # 恢复会话

Hadoop/Spark 任务集成

在提交大数据作业时典型用法:

nohup hadoop jar job.jar input output > log.txt 2>&1 &
nohup spark-submit --master yarn job.py > spark.log 2>&1 &

异常处理机制

建议在脚本中添加信号捕获:

trap "echo 'Task interrupted'; exit" SIGINT SIGTERM

日志轮转策略

为防止日志文件过大,可以使用 logrotate:

/path/to/logfile.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}

性能考量

大数据任务应额外注意:

  • 使用 ulimit 调整文件描述符限制
  • 避免将日志写入网络存储
  • 考虑使用 tee 命令同时输出到多个目的地

自动重启机制

通过 while 循环实现故障重启:

while true; do
    nohup command >> logfile 2>&1
    sleep 10
done

这些方法组合使用可以有效管理长期运行的大数据处理任务,确保任务在终端断开后持续执行,同时保持足够的可观测性和容错能力。

更多推荐