Bash中的任务(job)管理

那么什么是任务管理?顾名思义,就是指在Bash中对同一个tty中的多个工作进行添加、删除、处理等。由于Bash中的每个工作实际上是当前Bash的子进程,因此,从根本上说,job管理就是指对进程的管理。注意上述的表述中,使用了“同一个tty”这一字眼,这时因为,我们是无法通过tty1的job管理去管理tty2中的job的。例如,我们在tty3终端通过ctrl+z将vim放置到后台暂停,在当前tty中,通过jobs命令查看到的后台任务列表如下图所示:
这里写图片描述
而这时登录新的tty,通过jobs命令查看,发现并没有jobs位于后台:

这里写图片描述

job控制
1.  通过ctrl+z方式将job抛到后台

  刚才我们已经看到了,在vim编辑的过程中,通过ctrl+z快捷键的方式,可以将当前VIM放入后台暂停,同时tty终端会输出如下字样的提示:

[1]+ Stopped vim
其中[1]指的是job的编号,在之后将工作放置到前台,或者杀死后台进程的时候会用到。

Stopped代表当前进程的状态(实际上,通过ctrl+z方式放置到后台的job默认都是Stopped状态),vim指的是被放置到后台的job。等等,那个加号+是什么意思?如果我们再放置2个job到后台,通过jobs命令查看当前后台的jobs列表,输出如下:
这里写图片描述

发现不仅有+号,还有-号。其实+号指输入fg命令时,默认会将标识为+号的job取到前台来执行,-号则是+号job被fg之后的备胎。

2.  将命令丢到后台执行 &

在Bash下,经常会做一些比较耗费时间的工作,比如读取log的脚本,可能需要10分钟以上才能完成,总不能一直盯着吧?这时,最好的办法在命令后面加上&,将其放入后台执行

作为测试,我们在test.php中输入如下内容:

<?php
$i = 0;
while($i++ < 30){
    echo $i;
    sleep(1);
}

然后将其抛入后台执行:
这里写图片描述

我们看到,即使是在后台执行,程序的输出还是会输出到Bash的标准输出,即使你按了CTRL+C也不会有任何作用。这可以通过重定向解决:

php test.php 2>&1 >>test.log &

通过jobs命令查看jobs的状态:

这里写图片描述

跟刚才的几乎一样,除了这次抛入后台的是Running状态。在任务执行完毕之后,屏幕会输出如下字样:

这里写图片描述

表明当前工作已经完成。

3.  将后台工作拿到前台来处理 fg (%jobnumber)

  前面只讲了如何将工作放置到后台以及如何查看后台jobs状态。现在数据跑完了,运营MM走了,继续打开刚才后台的vim编码吧。这需要用到fg命令

命令格式:fg [%jobnumber] . 其中[]中的内容可省,这时默认取出的是标识为+的job.如果要取出指定的job,需要传入job编号:

fg %1

即可取出编号为1的job

4.  让工作在后台的状态变成运行中 bg (% jobnumber)

  我们知道,通过CTRL+Z放置放置到后台的job,默认是Stopped状态的,如果要让进程在后台执行,应该怎么做呢?bg命令就是干这个的。

  再次执行2中的脚本,不过这次在执行后,我们立即按下CTRL+Z使之暂停。jobs查看状态:

  这里写图片描述

  标号为3的job即是我们刚刚加入的。

  执行bg %3

  再次查看jobs:

  这里写图片描述

  可以看到,job已经由Stopped状态编程Running状态,并且命令后面多了一个&

5.  杀死后台的工作 kill

  现在,后台的进程多了起来,如果有些job不需要执行了,放在后台总归是不好的。这时,可以通过kill命令删除后台的jobs. 命令格式:Kill – signal %jobnumber

这与kill杀死一般的进程基本没什么区别,不同的是,这里是job的编号而不是进程的PID.

  Signal是传入的信号,常用的有:

-l 列出kill的可用信号

-1 重新读取配置

-9 立即强制终止(不会有清理工作)

-15 正常终止一个job(会有一些后续的清理工作)。

  为了保险起见,慎重使用-9参数。

最后,给几个hint:

  (1). VIM编辑过程中ctrl+z暂停手头的工作,做一些其他的处理,是经常使用的操作。例如:为了防止修改的代码不小心被同步到线上去,我们常常需要check编辑的文件已经放入了rsync的ignore-list中。

  (2). 通过&放置到后台的命令,虽然不会被CTRL+C中断,但是默认所有的输出都会输出到屏幕,这应该通过重定向来解决。如果输出的内容不需要或者忽略看,可以简单的重定向到/dev/null设备。

  (3). 如果一个脚本执行的时间较长,简单放入后台不管可能会因为TTY中断而导致job中断(即使是在后台,tty中断的情况下,job也会中断的)。这时可以通过nohup命令将运行脚本放置到系统的后台而不是当前tty的后台,该命令类似于:

nohup php test.php 2>&1  &

  现在,享受job管理带来的便利吧。
  转自

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Docker安装xxl-job,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了Docker和Docker Compose。如果没有,请先安装它们。 2. 创建一个文件夹,用于存放Jenkins和xxl-job的配置文件。例如,可以创建一个名为`docker-jenkins`的文件夹。 3. 在`docker-jenkins`文件夹创建一个名为`docker-compose.yml`的文件,并将以下内容复制到文件: ```yaml version: '3' services: jenkins: image: jenkins/jenkins:lts ports: - 8080:8080 volumes: - ./jenkins_home:/var/jenkins_home xxl-job-admin: image: xuxueli/xxl-job-admin:2.2.0 ports: - 8081:8080 environment: - PARAMS="--spring.datasource.url=jdbc:h2:mem:jobadmin --spring.datasource.username=sa --spring.datasource.password= --spring.datasource.driver-class-name=org.h2.Driver" depends_on: - jenkins ``` 4. 创建一个名为`jenkins_home`的文件夹,用于持久化Jenkins的配置和数据。 5. 打开终端或命令提示符,导航到`docker-jenkins`文件夹,并运行以下命令启动Docker容器: ```bash docker-compose up -d ``` 这将下载所需的镜像并启动Jenkins和xxl-job容器。 6. 等待一段时间,然后在浏览器访问`http://localhost:8080`,进入Jenkins的安装页面。按照提示进行Jenkins的初始化设置。 7. 完成Jenkins的初始化设置后,访问`http://localhost:8081/xxl-job-admin`,进入xxl-job管理界面。默认的管理员账号和密码均为`admin`。 现在你已经成功在Docker安装了Jenkins和xxl-job,并可以使用它们进行任务调度和管理

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值