Linux后台运行程序
有时候一些Web应用或者脚本啥的希望服务器后台运行,需要运行后关掉终端、退出登录、断开ssh不影响脚本或程序的运行。
nohup + screen
1、利用screen创建独立运行(孤儿)的会话session。
$ screen -S example1
创建完自动进入
2、在session中利用nohup将应用挂载到后台并将输出重定向到文件
$ 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 <作业名称>
-h <行数>
-m
-r <作业名称>
-R
-s
-S <作业名称>
-v
-x
-ls
-wipe
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
screen -ls
screen -r name
screen -d name
screen -d -r name
[Ctrl + a + d]
|