很多小伙伴部署运行CWNAS二进制程序时,都会遇到一个头疼的问题:明明在Linux命令行里正常启动了程序,前台、后台运行都没问题,可只要关闭SSH终端、退出远程连接或关掉本地命令行窗口,正在运行的CWNAS进程就会直接终止、服务中断。每次都得保持终端常开,既占用操作窗口,又无法实现程序长期稳定后台驻留,严重影响NAS服务的持续运行,反复重启程序更是费时费力。1. 打开终端,切换到cwnas目录,输入运行命令“./cwnas”,即可启动CWNAS。2. 可以看到“畅网AI NAS启动成功”,在浏览器输入NAS地址也可以正常访问!其实这不是CWNAS程序本身的Bug,而是Linux系统的进程运行机制导致的。默认情况下,终端启动的所有程序都是终端的子进程,一旦关闭终端,系统会发送SIGHUP挂起信号,终止该会话下的所有关联进程,这就是程序随终端关闭而退出的核心原因。今天就给大家分享几种简单高效、可以保持二进制程序运行的解决方案,从临时应急到稳定常驻全覆盖,彻底搞定Linux终端关闭后程序自动终止的难题。# 后台运行,关闭终端不退出,日志默认输出 nohup.outnohup ./你的程序 &# 自定义日志文件nohup ./你的程序 > run.log 2>&1 &# 查看程序运行状态 ps aux | grep cwnas# 停止后台运行,本例中可以看到cwnas的进程ID为2735kill 2735
二、screen会话,适合需要随时切回去看节目的情况# 创建后台会话screen -S mycwnas# 在会话里执行程序./你的程序# 退出会话(程序继续跑):Ctrl+A 再按 D# 关闭会话(关闭程序):会话里直接输入 exit 或 先按 Ctrl+A 再输入 :quit 回车 # 重新连接会话screen -r mycwnas# 查看所有会话screen -ls# 强制关闭某个会话screen -X -S 会话ID quit# 强制关闭所有screenpkill screen
三、systemd托管,开机自启,生产首选,崩溃会自动重启sudo vim /etc/systemd/system/myapp.service
[Unit]Description=后台常驻程序After=network.target[Service]Type=simpleExecStart=/绝对路径/你的二进制程序WorkingDirectory=/绝对路径Restart=always[Install]WantedBy=multi-user.target
sudo systemctl daemon-reloadsudo systemctl start myappsudo systemctl enable myapp # 开机自启# 停止服务sudo systemctl stop myapp# 取消开机自启sudo systemctl disable myapp# 重启服务sudo systemctl restart myapp# 查看运行状态sudo systemctl status myapp
四、tmux终端托管,与screen类似,但比他好用tmux new -s runapp# 执行程序./你的程序# 脱离:Ctrl+B 松开两个键 再按 D# 重连:tmux a -t runapp# 查看当前所有在后台运行的tmux会话 tmux ls# 彻底关闭这个tmux会话tmux kill-session -t runapp# 强制关闭所有tmuxpkill tmux
通过上面的4种方法,都可以实现二进制程序在Linux中常驻后台运行,让CWNAS脱离终端窗口限制!