Linux后台运行程序(可退出登录|断开ssh)

Linux后台运行程序

有时候一些Web应用或者脚本啥的希望服务器后台运行,需要运行后关掉终端、退出登录、断开ssh不影响脚本或程序的运行。

nohup + screen

1、利用screen创建独立运行(孤儿)的会话session。

$ screen -S example1	# 创建一个名为example1的session

创建完自动进入

2、在session中利用nohup将应用挂载到后台并将输出重定向到文件

# 例如ls
$ nohup ls /home >> /tmp/ls.log 2>&1 &

3、从session暂离

Ctrl + a d # 按住Ctrl后先按a再按d。

因为他是孤儿进程,所以只要不关闭机器或者kill它,他就不会结束,当然,可以自己结束。

关于nohup

nohup 命令运行由 Command参数和 Arg参数构成,忽略(SIGHUP)信号。

nohup 是 no hang up 的缩写,意为不挂断,但没有后台运行,终端不能标准输入。结合&可挂到后台

在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,或者 >>/dev/null 扔掉

语法:

nohup [命令]] [参数] [(其他操作) &]	# &表示挂起

关于screen

1、简介

​ Screen是一个全屏窗口管理器,它在多个进程(通常是交互式shell)之间多路传输物理终端。每个虚拟终端提供DEC VT100终端的功能,此外,还提供ANSI X3.64(ISO 6429)和ISO 2022标准中的若干控制功能(例如,插入/删除行和支持多个字符集)。每个虚拟终端都有一个回滚历史缓冲区和一个复制粘贴机制,允许用户在窗口之间移动文本区域。当screen被调用时,它会创建一个包含shell(或指定命令)的窗口,然后就可以不打扰您了,这样您就可以像平常一样使用这个程序了。然后,您可以随时使用其他程序(包括更多shell)创建新的(全屏)窗口,关闭当前窗口,查看活动窗口列表,打开和关闭输出日志记录,在窗口之间复制文本,查看回滚历史记录,在窗口之间切换,所有的窗口都完全独立地运行它们的程序。当程序的窗口当前不可见时,甚至当整个屏幕会话与用户终端分离时,程序仍继续运行。

2、语法

$ screen [参数] [内容]
 
-A	# 将所有的视窗都调整为目前终端机的大小。
-d   <作业名称>	# 将指定的screen作业离线。
-h   <行数>	# 指定视窗的缓冲区行数。
-m	# 即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r   <作业名称>	# 恢复离线的screen作业。
-R  # 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s  # 指定建立新视窗时,所要执行的shell。
-S   <作业名称>	# 指定screen作业的名称。
-v  # 显示版本信息。
-x  # 恢复之前离线的screen作业。
-ls	# 显示目前所有的screen作业。
-wipe	# 检查目前所有的screen作业,并删除已经无法使用的screen作业。

3、快捷键

在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。

Ctrl + a +功能
?Help,显示简单说明
"列出终端列表
A重命名终端
c创建新的终端,并切换到该终端
d暂时断开会话,但所有任务都依然执行
k关闭当前终端,并切换到下一个终端(当没终端时 退到原始shell终端)
n切换到下一个终端
p切换到上一个终端
t显示当前时间,和系统的 load
S新建水平线分割终端
Tab水平线切换终端
X关闭当前终端
+扩大当前终端
-缩小当前终端
[Space]窗口切换
0-9在0-9个终端之间切换
[Ctrl + a]最近使用的2个窗口切换
w列出终端列表
x锁住当前窗口,需用用户密码解锁
z把当前会话放到后台执行,用 shell 的 fg 命令则可回去。
exit关闭当前终端
:screen 新建 screen 终端,并运行命令
:resize 改变当前窗口高度为
:quit退出 screen 关闭所有 screen 终端,结束其中所有任务

选择模式下操作

Ctrl + a + (进入选择模式)选择模式下功能
或 Ctrl-u光标上移一页
或 Ctrl-d光标下移一页
或 h光标左移一格
或 j光标下移一行
或 k光标上移一行
或 l光标右移一格
选择开始,选择结束
退出选择模式
Ctrl-a ]粘贴选择的内容

4、例:

    screen -S name	# 新建一个叫name的session
    screen -ls		# 列出当前所有的session
    screen -r name	# 回到name这个session
    screen -d name	# 远程detach某个session
    screen -d -r name	# 结束当前session并回到name这个session
    [Ctrl + a + d]	# 暂离session (回到之前的shell)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值