将 Spring Boot 作为守护进程启动的一种简单的方法

举报
汪子熙 发表于 2024/09/01 15:53:09 2024/09/01
【摘要】 我有一个SpringBoot应用,通过shell脚本start.sh启动。现在我期望通过守护进程的方式启动这个应用,这样我即使关掉终端,该应用也能继续运行。使用Linux命令nohup 加上原始启动应用的脚本:nohup ./start.sh &打印的14286即为通过守护进程启动的进程ID:这样我关掉终端,该应用也不会终止,可以继续运行了:nohup 是一个在类 Unix 操作系统中常常使...

我有一个SpringBoot应用,通过shell脚本start.sh启动。现在我期望通过守护进程的方式启动这个应用,这样我即使关掉终端,该应用也能继续运行。

使用Linux命令nohup 加上原始启动应用的脚本:

nohup ./start.sh &

打印的14286即为通过守护进程启动的进程ID:

这样我关掉终端,该应用也不会终止,可以继续运行了:

nohup 是一个在类 Unix 操作系统中常常使用的小工具,其名称来源于 no hang up,意思是“不中断”。它的主要功能是在用户退出登录会话或关闭终端的情况下继续运行一个命令。这在长时间运行的软件或脚本需要保持持续执行的情况下非常有用。

在多任务处理和远程连接频繁的 Linux 环境中,nohup 的应用场景非常广泛。例如,在长时间运行的批处理任务或远程服务器操作中,如果用户意外断开会话,未加防护的任务往往会被终止。nohup 则提供了一个简单而有效的解决方案。

首先,nohup 的基本用法是:

nohup command [args] &

其中,command 是你希望保持后台运行的命令,args 是该命令的参数,& 代表会将该命令放到后台执行。

先来看一个简单的例子:

假设你有一个需要长时间运行的 Python 脚本 long_running.py,直接在终端运行可能会被中途终止。这时可以通过 nohup 让它在后台运行:

nohup python long_running.py &

执行上述命令后,nohup 会自动将其输出重定向到一个文件,通常是 nohup.out,因此即便终端关闭,任务输出仍然保留。你可以通过以下命令来查看输出:

tail -f nohup.out

当然,如果你希望将输出重定向到一个特定的文件,可以这样做:

nohup python long_running.py > my_output.log 2>&1 &

这条命令的意思是,标准输出和标准错误都将被重定向到 my_output.log 文件中。

有时我们也希望不记录输出,直接将其扔掉:

nohup python long_running.py > /dev/null 2>&1 &

此时,所有的输出都会被重定向到 /dev/null,即丢弃。

nohup 也可以结合其他命令来使用。典型应用如通过 rsync 做大文件同步时:

nohup rsync -avz /source/dir/ user@remote:/destination/dir/ > rsync_output.log 2>&1 &

通过这种组合,即便网络连接中断,同步任务也不会受到影响。任务的进程信息会记录在 rsync_output.log 文件里。

另一个常见的用法是将与定时任务(通过 cronat 命令调度)结合使用,确保任务在后台可靠运行。例如:

编辑 crontab 文件:

crontab -e

添加如下条目:

* * * * * nohup /path/to/script.sh > /path/to/logfile.log 2>&1 &

这条配置会确保 script.sh 脚本每分钟运行一次,并将输出重定向到指定的日志文件。

理解 nohup 的原理是,它会忽略 SIGHUP 信号,即挂起信号,通常这个信号会在终端关闭或用户退出时发送到进程。nohup 使用 setsid() 调用启动一个新的会话,从而避免终端关闭对进程的影响。

尽管 nohup 是一个简单有效的工具,但并非万能。当需要更高级的进程管理能力时,可以用更为复杂的工具集,比如 screentmux,这些工具允许多个终端会话,把任务放到后台后还能随时恢复到前台继续操作。

要理解在一些基础设施较为繁杂的环境中,nohup 只是进程管理的一部分。对于需要高度可靠性的任务,如服务器运维、后台服务、或开发环境,systemd 这样的进程管理工具提供了持久化机制。在这些工具中,脚本的执行可以由系统控制,保证即便系统重启,脚本仍会自动启动和监控。

总结来讲,nohup 在 Linux 环境中添加了确保任务不中断执行的能力,是日常运维中一个重要的基本工具。通过合理运用 nohup,用户可以显著提高系统的可靠性及用户操作的便捷度。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。