Linux怎么后台运行任务

例如需要让rsync同步的时候关闭终端也能继续运行

在启动rsync命令后直接关闭终端窗口一般会导致rsync进程终止,因为当终端关闭时,它会发送一个SIGHUP信号到与它相关联的子进程,这通常会结束这些进程。

如果您想要在关闭终端窗口后让rsync继续运行,可以使用几种方法

1、使用nohup命令:

nohup rsync -avzhP -e "ssh -p SSH_PORT" LOCAL_DIRECTORY USER@REMOTE_HOST:REMOTE_DIRECTORY &

这里的nohup命令会使rsync忽略SIGHUP信号,而&rsync置于后台执行。

2、使用screentmux等终端复用器: 这些工具可以创建一个持久的会话,即使您断开了与会话的连接,会话中运行的程序也会继续运行。

使用screen的话,可以这样做:

screen -S rsync_session
rsync -avzhP -e "ssh -p SSH_PORT" LOCAL_DIRECTORY USER@REMOTE_HOST:REMOTE_DIRECTORY

然后你可以按Ctrl-A然后按D来脱离screen会话,rsync会继续在screen会话内运行。

3、使用atbatch命令:

这些命令可以在特定时间安排命令执行,而batch会在系统负载下降到特定水平时执行。这些通常用于计划任务,但也可以用于确保任务在关闭终端后继续运行。

在使用nohup时,所有输出默认会被重定向到nohup.out文件中,除非您指定了其他输出文件。使用screentmux时,输出将留在虚拟会话的终端中,您可以随时重新连接会话来查看输出。

怎么重新连接screen会话

要重新连接到一个已经启动的screen会话,您需要先列出所有的screen会话,然后选择您想要重新连接的会话。

首先,打开一个终端窗口并输入以下命令来列出所有的screen会话:

screen -ls

这个命令会提供一个或多个会话的列表,每个会话旁边都有一个唯一的标识符(通常是一串数字),如下所示:

There are screens on:
    12345.pts-0.your_host (Detached)
    67890.pts-1.your_host (Detached)
2 Sockets in /var/run/screen/S-your_username.

在上面的例子中,12345.pts-0.your_host67890.pts-1.your_host是两个不同的会话标识符。如果您记得创建会话时指定的名字(比如rsync_session),那么它也会显示在这个列表中。

要重新连接到会话,使用如下命令:

screen -r 12345

您需要用您自己的会话标识符替换12345。如果您在创建screen会话时给它命名了(例如使用了screen -S session_name命令),您也可以使用该名称来重新连接:

screen -r session_name

如果您的screen会话没有正常脱离(例如,如果您的SSH连接断开而导致的),则可能需要使用”-d -r”组合来先强制脱离会话,然后重新连接:

screen -d -r 12345

或者使用会话名称:

screen -d -r session_name

或者使用会话名称:

screen -d -r session_name

这样您就应该能够恢复到之前的screen会话继续您的工作了。

怎么查看nohup后台运行中的任务

nohup 命令用于将程序以忽略挂断信号的方式运行起来,因此即使终端关闭,程序也会继续运行。如果你使用了 nohup 命令来运行 rsync 或其他任何命令,并且在命令的末尾添加了 & 符号来将其放入后台运行,那么程序将会继续执行,即使你断开了 SSH 连接。

要查看这些使用 nohup 运行的任务,你可以使用几种不同的方法:

1、查看nohup输出文件:

默认情况下,nohup 命令会将输出写入到当前目录下的一个名为 nohup.out 的文件中,除非你指定了其他的输出文件。使用 tail 命令可以查看这个文件的内容:

tail -f nohup.out

这个命令会持续输出 nohup.out 文件的内容,你可以看到最新的日志信息。

2、使用ps命令:

你可以使用 ps 命令来查看当前用户的所有后台运行的任务,包括使用 nohup 运行的任务:

ps -u $(whoami)

这会列出属于当前用户的所有进程。你可以查找 rsync 或其他你使用 nohup 运行的命令。

3、使用jobs命令:

如果你的作业是在当前会话中放入后台的,那么使用 jobs 命令可以列出会话中所有的后台任务。请注意,jobs 命令只能显示当前会话中的后台任务,因此如果你已经关闭了终端或者创建了新的会话,这个命令不会显示任何输出。

4、使用pgreppkill命令:

你也可以使用 pgrep 来查找特定命令的进程ID,例如:

pgrep -a rsync

-a 选项会显示完整的命令行,这样你可以确认是你运行的 rsync 命令。

请记住,即使使用 nohup,进程也是绑定在其启动的系统上的。如果系统重启,那些进程不会自动重新启动,除非它们被加入到了系统的启动脚本中,如 /etc/rc.local 或通过一个系统服务管理器如 systemd 来管理。

sanradar
sanradar
文章: 103