Linux使用nohup命令在后台运行脚本

张开发
2026/4/4 10:21:09 15 分钟阅读
Linux使用nohup命令在后台运行脚本
在 Linux 或类 Unix 系统中后台运行脚本是一项非常实用的技能尤其适用于需要长时间运行的任务或服务。通过将脚本放到后台执行用户可以继续使用终端进行其他操作而不必担心脚本因为终端关闭或注销而中断。nohup 命令简介nohup 是一个命令行工具用于防止命令因用户注销或终端关闭而被挂起。其名称来源于 “no hang up”即不挂断。在 Unix 系统中当用户注销或关闭终端时会向正在运行的进程发送一个挂断信号SIGHUP导致进程终止。nohup 命令的作用就是让指定的命令忽略这个挂断信号从而继续运行。基本用法nohup 的基本用法非常简单只需将其放在要后台运行的命令前即可。例如如果你有一个名为 start.sh 的脚本想在后台运行它并且不希望因为终端关闭而中断可以使用以下命令1nohupsh start.sh 这里sh start.sh 是要运行的脚本 符号表示将命令放到后台执行。nohup 会忽略挂断信号确保脚本在后台持续运行。输出重定向默认情况下nohup 会将命令的标准输出和标准错误输出到一个名为 nohup.out 的文件中位于当前工作目录下。如果不想使用默认文件可以通过重定向操作将输出指定到其他文件。例如1nohupsh start.sh start.log 21 是一个 shell 命令用于将命令的输出重定向到文件。start.log 是指定的输出文件名所有标准输出都会被写入这个文件。21 是一个特殊的重定向操作表示将标准错误文件描述符为 2重定向到标准输出文件描述符为 1这样错误信息也会被写入 start.log 文件中。 符号将整个命令放到后台执行。通过这种方式你可以清晰地查看脚本的运行日志而不会因为终端关闭或注销而丢失输出信息。 符号的作用 符号在 shell 命令中用于将命令放到后台执行。当在命令末尾加上 时shell 会创建一个新的子进程来运行该命令同时返回到命令提示符允许用户继续在终端输入其他命令。后台进程的特点后台进程不会阻塞终端用户可以继续使用终端进行其他操作。后台进程可以通过 jobs 命令查看使用 fg 命令将其带回前台或使用 kill 命令终止它。如果终端关闭后台进程通常会收到挂断信号SIGHUP除非使用了 nohup 命令。注意事项当使用 将命令放到后台执行时如果命令依赖于前台进程的某些资源如标准输入可能会出现问题。因此在使用 时通常需要对命令的输入输出进行适当的处理。后台进程的优先级通常较低系统会根据调度算法动态调整其运行优先级以保证系统的整体性能。实际应用场景长时间运行的任务对于一些需要长时间运行的任务如数据备份、大规模文件处理、复杂计算等使用 nohup 命令结合 符号可以在后台运行相关脚本避免因终端关闭或注销而导致任务中断。例如一个数据备份脚本 backup.sh 可以这样运行1nohupsh backup.sh backup.log 21 这样备份任务会在后台执行所有的输出信息都会被记录到 backup.log 文件中方便后续查看和分析。服务启动在启动一些服务时也需要将其放到后台运行。例如启动一个 Web 服务的脚本 start_web.sh 可以使用以下命令1nohupsh start_web.sh web.log 21 这样Web 服务会在后台启动所有的日志信息都会被写入 web.log 文件中方便监控服务的运行状态。定时任务对于一些定时任务虽然通常使用 cron 作业来实现但在某些情况下也可以通过脚本结合 nohup 命令来完成。例如一个每天定时清理日志的脚本 clean_logs.sh 可以这样运行1nohupsh clean_logs.sh clean_logs.log 21 通过将这个命令放入定时执行的脚本中可以确保日志清理任务在后台自动运行不会因为终端关闭或注销而中断。常见问题及解决方法nohup.out 文件权限问题在某些情况下nohup 默认生成的 nohup.out 文件可能会因为权限问题导致无法写入。解决方法是提前创建一个具有适当权限的输出文件然后将输出重定向到该文件。例如123touchoutput.logchmod644 output.lognohupsh start.sh output.log 21 后台进程被意外终止如果后台进程被意外终止可能是由于系统资源不足、进程被杀掉等原因。解决方法是检查系统资源使用情况确保有足够的资源供进程运行同时可以通过 ps 命令查看进程状态使用 kill 命令手动终止进程时要谨慎操作避免误杀重要进程。

更多文章