Linux后台运行程序技巧经验总结

创建sh执行文件

使用touch命令创建一个sh文件,例如

touch test.sh

接着将目标程序的启动命令写入一个sh文件中例如:
test.sh文件中写入以下内容:

dotnet ./App.dll --config ../Config/StartConfig/LocalAllServer.txt > ../Logs/nohup.out

完成后保存退出,并使用chmod命令修改sh文件的相关权限

# 具体的权限相关的操作,自行百度一下吧
chmod 777 test.sh

使用nohup启动sh文件

权限修改完成后使用以下nohup执行脚本,并且进行后台运行

# 切记需要在命令的最后加上&,否则启动的将还是一个前台程序,容易出现一些意想不到的问题
nohup test.sh > Log/nohup.out &
# 这里将输出的内容输出到Log/nohup.out文件中,该文件中都是一些程序执行异常的错误信息,
# 在启动后查看该文件中的内容,从而确定是否成功启动了程序,如果成功启动了程序,该文件中不会存在任何内容
cat Log/nohup.out

关于坑的记录

1、正常启动程序没有丝毫问题,但使用nohup启动时出现"Bad File Descriptor"异常

异常出现原因:因为nohup是让程序在后台执行,而如果程序中存在对打开/访问团控制台的输入或输出相关的调用,就会触发"Bad File Descriptor"异常
,简单的理解就是程序需要控制台帮忙结果控制台没了,所以就会出现该问题(仅个人理解,如存在不对或遗漏的地方欢迎补充)!
解决方法

1、将标准输出与标准错误输出重定向到同一个文件,详细的信息可百度nohup命令的使用(没成功解决本人所遇到的问题)
使用例子:nohup java -jar shell-app.jar 'spring shell command' > log.log 2>&1
2、利用自动断开的机制启动程序(虽然不是那么的专业,但短暂的解决了本人的问题)
具体操作步骤:
1.使用useradd命令新建一个用户账号,例如:useradd Test,这个用户账号用于启动命令(记得创建账号后使用passwd命令设置密码)
2.使用ssh命令加上一步创建的账号连接Linux,之后就直接正常的启动程序(不使用nohup或后后台执行),例如:dotnet ./App.dll
3.成功启动程序后,就可以不用管了,保持窗口的开启(这里本人使用的是Windows进行的Linux连接),等待几分钟后关闭该窗口即可,这时候使用其他账号在服务端使用ps命令查看进程时,可以发现刚刚开启的程序依然存在,且并没有因为我们关闭连接窗口而关闭
注:但该方法存在一些缺点,一是程序一旦启动后,短时间内再次使用该账号登录连接Linux时,利用上面步骤启动的程序将会自动关闭,二就是使用该方法启动程序就需要占用一个用户账号,就又要涉及账号的管理,增加了额外的麻烦
注:经过多次尝试该方法挂载的进程时间长了,还是会被系统给清理掉,慎用!
3、使用虚拟终端启动程序(最终成功解决问题)
1.安装Screen,这里我使用的是阿里云服务器,所以直接使用命令:yum install screen就可以了
2.创建虚拟终端:使用命令: screen -R 终端名字,例如:screen -R GS (详细的命令可以使用screen --help进行查看)
3.进入虚拟终端后界面上几乎没有什么区别,直接目标程序的启动命令启动程序就好了,如果要确定是否进入了虚拟终端,可以按下ctrl+a键,然后按下d键即可切换回到主终端,而虚拟终端这时候是不会关闭的,可以使用命令screen -ls 查看当前用户账号下的虚拟终端(使用该账号创建的虚拟终端只能在该账号下使用screen -ls命令搜索到,即使使用root账户也无法查看到其他账户下的虚拟终端列表【可能存在其他办法可以查看,请自行研究】)
4.使用screen -ls命令后,可看到以下效果图
虚拟终端效果图
接着使用命令screen -R GSS即可重新连接上该虚拟终端,注:其中的66964代表的是该虚拟终端的进程号,而GSS代表虚拟终端的名称,切记使用nohup命令后台执行程序时,出现Bad File Descriptor异常,就是因为没有终端的存在,所以该进程切记不可kill掉,不然Bad File Descriptor异常没有出现,还是会出现别的问题
补充:如果需要退出虚拟终端的话,在虚拟终端连接成功的情况下,使用exit命令即可成功退出虚拟终端,更多详细的内容,可以看下下面的文章:
Linux上后台保持Terminal交互运行的三种方式:nohub、screen和tmux
在linux后台运行脚本命令和程序的方法大全

结尾

使用以上步骤后,即可成功将程序挂在后台执行,该方法也是临时尝试成功后的一次总结,后期如果遇到特殊的情况或问题也会将遇到的坑进行分享!
第二十一篇文章的图片

YX9010_0@的第二十一篇文章

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值