centos(17)-nohup、&、>、/dev/null、2>&1 后台离线运行程序

本文介绍如何在Putty上后台运行程序,例如SpringBoot项目。通过使用&、nohup命令等,实现进程脱离终端并始终保持运行状态,同时管理日志输出。

假如在putty上用相关命令开启一个程序,比如用java命令启动一个spring boot项目,此时日志会占据屏幕,无法再执行其他命令,并且一但关闭当前putty终端或按ctrl+c,该进程都会被结束。本篇将介绍如此让该进程脱离当前终端且始终运行。

 

& 后台运行

命令 参数 &:在原有的命令和参数后面加空格&,此时当有日志时仍然会输出到屏幕,但进程会在后台运行,我们在前台仍然可以执行其他命令。只是关闭putty终端后该进程还是会结束,而且我们并不想在前台看到那些日志。

nohup始终运行

nohup 命令 参数:nohup 的位置在命令的前面,即使关闭putty终端该进程仍然会继续执行,其日志不会输出到前台,而是记录在当前目录的nohup.out文件中。没有&默认情况是在前台执行,所以前台被占用也无法输入其他命令,而且ctrl+c仍然会结束当前前台程序。

nohup 结合 &

nohup 命令 参数 &:当两者结合使用时,进程会在后台始终运行,关闭putty终端或在前台ctrl+c都不会关闭,日志输出到nohup.out。

命令示例: nohup 命令 参数 &  

>输出文件

假如我们不想把日志输出到nohup.out,而是想输出到test.out

示例:nohup 命令 参数 >test.out &

/dev/null 黑洞设备

通常一些java框架如spring都会配置记录日志,我们并不需要linux来记录日志,而且时间长了nohup.out文件会变的非常大,所以我们把linux中的日志全部丢到/dev/null中,相当于垃圾桶,就不会再产生linux日志了。

示例:nohup 命令 参数 >/dev/null &

2>&1错误输出 

有一种很流行的命令格式是:nohup 命令 参数 >/dev/null 2>&1 &,比上面多了个2>&1。2是错误信息输出 ,1是标准信息输出。>/dev/null是将1放进黑洞, 2>&1是将2放进1,最终都进入黑洞。我们要搞清楚,2并不是程序运行时的异常日志,而是linux系统中的错误提示,比如nohup 命令中,这个命令我们输错,少打了一个字母,系统会立即给我们提示。而你加了 2>&1以后,这个错误提示就进入黑洞,你只能一脸茫然的干瞪眼。

查找和杀死进程

如何查找和杀死在后台终始运行的进程,参考第11

 

[root@yfw ~]# cd /opt/openfire/enterprise/spark/Spark [root@yfw Spark]# cat > /root/start-spark-client.sh << 'EOF' > #!/bin/bash > > export DISPLAY=:99 > export PATH="/opt/openfire/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin" > export HOME=/opt/openfire > > # 确保 Xvfb 已运行 > if ! pgrep -f "Xvfb :99" > /dev/null; then > echo "Starting Xvfb..." > Xvfb :99 -screen 0 1024x768x24 -nolisten tcp -noreset & > sleep 3 > fi > > # 切换到 Spark 目录 > cd /opt/openfire/enterprise/spark/Spark || { > echo "Failed to enter Spark directory" > exit 1 > } > > # 启动 Spark 客户端(后台运行 + 日志记录) > nohup ./Spark > /var/log/spark-client.log 2>&1 & > > echo "Spark client started with PID $!" > EOF [root@yfw Spark]# [root@yfw Spark]# # 添加可执行权限 [root@yfw Spark]# chmod +x /root/start-spark-client.sh [root@yfw Spark]# [root@yfw Spark]# touch /var/log/spark-client.log [root@yfw Spark]# chown root:root /var/log/spark-client.log [root@yfw Spark]# systemctl status rc-local.service --no-pager ● rc-local.service - /etc/rc.d/rc.local Compatibility Loaded: loaded (/usr/lib/systemd/system/rc-local.service; enabled-runtime; vendor preset: disabled) Active: active (exited) since Thu 2025-10-16 16:06:49 CST; 1 weeks 6 days ago Docs: man:systemd-rc-local-generator(8) Tasks: 0 (limit: 23712) Memory: 0B CGroup: /system.slice/rc-local.service Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable. [root@yfw Spark]# # 将你的脚本添加到 rc.local 中 [root@yfw Spark]# echo '/root/start-spark-client.sh' >> /etc/rc.d/rc.local -bash: /etc/rc.d/rc.local: Operation not permitted [root@yfw Spark]# tail -n 5 /etc/rc.d/rc.local # Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure # that this script will be executed during boot. touch /var/lock/subsys/local [root@yfw Spark]# (crontab -l 2>/dev/null; echo "@reboot sleep 15 && /root/start-spark-client.sh") | crontab - /var/spool/cron/#tmp.yfw.szrengjing.com.XXXXd8Qdub: Operation not permitted [root@yfw Spark]# crontab -l 36 12 * * * /www/server/cron/3ab48c27ec99cb9787749c362afae517 >> /www/server/cron/3ab48c27ec99cb9787749c362afae517.log 2>&1 */20 * * * * /www/server/cron/fb883f6b39107c5911f51baaa67b15f1 >> /www/server/cron/fb883f6b39107c5911f51baaa67b15f1.log 2>&1 10 3 * * * /www/server/cron/2799891651ebbc079ea0dd3ec8614b26 >> /www/server/cron/2799891651ebbc079ea0dd3ec8614b26.log 2>&1 */20 * * * * /www/server/cron/9dea92afd6c9fe0029eb0681a7b35bec >> /www/server/cron/9dea92afd6c9fe0029eb0681a7b35bec.log 2>&1 30 1 * * * /www/server/cron/73282442fd0f9aeebe1495aeeeb8bdaa >> /www/server/cron/73282442fd0f9aeebe1495aeeeb8bdaa.log 2>&1 30 1 * * * /www/server/cron/5659299721031ec02028a5351d0b1373 >> /www/server/cron/5659299721031ec02028a5351d0b1373.log 2>&1 30 1 * * * /www/server/cron/faa14d9e55771f1897d35cb06fdde964 >> /www/server/cron/faa14d9e55771f1897d35cb06fdde964.log 2>&1 [root@yfw Spark]#
10-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值