Linux下使用screen后台执行命令

简介

GNU Screen简称Screen或screen,源自GNU计划,是一个多重视窗管理程序。
screen的主要功能如下:

  • 会话恢复:只要screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r [name]就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。
  • 多窗口:在screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。
  • 会话共享:screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。

基本用法

安装screen

大部分系统不自带screen,你需要通过下列命令安装screen:

# RedHat
sudo yum install screen
# Debian
sudo apt install screen
# ArchLinux
sudo pacman -S screen
# And more...

screen命令的基本格式为 screen [-opts] [cmd [args]]

创建会话

想要创建一个新的screen会话,可以使用如下命令:

  • screen -R [name]:创建一个名为name的会话,若name会话已存在,则直接进入name会话。
  • screen -S [name]:创建一个名为name的会话,不检查name是否存在。

挂起会话

在会话中,使用快捷键Ctrl+A+D来讲该会话送至后台运行

查看会话

输入screen -lsscreen --list来查看当前用户的所有会话

恢复会话

  • 使用screen -R [name]:尝试恢复name会话,若name会话未创建或已连接,则新建一个 同名但不同PIDname会话。
  • 使用screen -r [name]:直接恢复name会话,若name会话未创建,则告知使用者会话不存在。

销毁会话

  • 在会话中:可以使用exit命令来销毁该会话,或使用快捷键Ctrl+D
  • 不在会话中:使用screen -S [name] -X quit来销毁name会话

实战

例如,我们需要在一台Linux服务器上运行Minecraft服务器:

  1. 创建一个名为mc的会话

    screen -R mc
  2. 进入服务器根目录并运行启动脚本

    cd your/server/directory  # 此出填写服务器根目录
    bash shart.sh
  3. 将该会话挂起
    按下键盘上的Ctrl+A,在不松开按键的情况下再按下D

  4. 需要再次访问服务器后台时,输入以下命令

    screen -R mc
  5. 如需销毁该会话,你可以执行下列操作

    • 输入stop或按下Ctrl+C来停止服务器(若服务器未停止运行)
    • 在该会话中输入exit或按下Ctrl+D来销毁会话
    • 在会话外输入screen -S mc -X quit来销毁会话

进阶用法

screen高阶命令

  • -dmS [name] 作为守护进程启动:以离线模式创建name会话
  • -X [cmd] 向指定会话发送cmd命令

实战

我们需要在某台安装了Linux的个人电脑上运行一个内网穿透客户端,并让它开机自启。
我们已经在服务器上部署内网穿透服务端NPS,并正确配置了客户端

  1. 将客户端npc解压至某个目录,如/opt/npc
  2. /opt/npc目录下编写启动脚本start_npc.sh
    #! /bin/bash
    screen -dmS npc # 静默创建 npc 会话
    screen -S npc -X stuff 'cd /opt/npc\n' # 进入 npc 安装目录
    screen -S npc -X stuff './npc -server=your.domain:port -vkey=your#key -type=tcp\n' # 启动 npc 客户端
  3. 输入命令sudo crontab -e,然后再文件末尾追加一行
    @reboot /bin/bash /opt/npc/start_npc.sh

    保存并退出编辑器

  4. 使用sudo reboot命令重启电脑后输入sudo screen -R npc查看npc是否正常运行

PS:

  • 脚本中的\n相当于在shell中按下Enter(回车)按键,\n可以跟在命令后,表示这行命令已完成,也可以自成一行
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇