Linux Jobs & TMUX & SCREEN Notes

plus2047 于 2021-10-19 发布

Linux 基本任务调度

默认bg,fg不带%N时表示对最后一个进程操作.

有时候希望让一个正在运行的任务切换到后台,并且在登出之后继续运行,可以运行以下流程:

# only work for bash
# ctrl + z
disown -h %job_number
bg %job_number
# if only one job: %job_number can be omitted.

TMUX

tmux 相当于打开一个后台进程保存所有的终端会话,即使远程连接等登录断开,会话仍然会保持,这样能够保证程序继续运行。tmux 具有良好的操作逻辑和帮助文档,如键入 tmux s 之后按下 table 能够看到所有补全命令和简单说明(这个功能可能是搭配 zsh 实现的)。

tmux 的一个 session 还可以分出来多个 window,这里因为笔者暂时用不到不再赘述。一个 window 可以分出来多个 pane:

但是更熟练的操作方式是使用快捷键。tmux 的快捷键是先按下前缀,然后键入快捷键。默认前缀为 ctrl+a. 如果不记得下面列出的快捷键,可以按下冒号然后输入命令全称,如 select-window.

在通过 SSH 登录时自动开启 tmux:

if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ] ; then
    if [[ ! $TERM =~ screen ]]; then
        if tmux info &> /dev/null; then
            tmux attach &> /dev/null
        else
            exec tmux
        fi
    fi
fi

参考:博客1; 博客2.

SCREEN

SCREEN 不如 TMUX 功能丰富,但在大部分系统上预装,而且功能足够。其命令行使用(在 SCREEN 之外使用)可以参照 TLDR 帮助页。其默认操作以 Ctrl+a 作为前缀,可以设置成反引号方便使用。一份详细的按键列表

一些常在 SCREEN 中使用的快捷键:

Basic screen usage:

About Splitting:

Note: After splitting, you need to go into the new region and start a new session via ctrl+a, c before you can use that area.

特殊用法,用于任务调度,启动 new screen 并在其中运行命令:

screen -dmS new_screen sh
screen -S new_screen -X stuff "cd /dir
"
screen -S new_screen -X stuff "java -version
"

注意换行和引号的使用。

特殊用法,SSH 登录时启动 screen 并 attach 到一个特定的 screen, 可以在本地使用以下命令登陆:

ssh -t host.example.com screen -Rd -S your_name

或者在服务器修改 .bashrc 文件,以便与 MOSH 兼容。添加行:

if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ] ; then
    if [ -z "$STY" ]; then screen -R -d; fi
fi

计划任务

参考该文件:

/etc/crontab