当前位置:   article > 正文

linux下如何让脚本在后台运行_后台调起脚本

后台调起脚本

       在服务器中我们经常需要将一些脚本挂在后台继续运行,而不是随着我们切断一段会话就结束了运行,常见的作法有如下几种,下面就进行简单的总结:

0. bg\fg

在 Windows 上面,要么让一个程序作为服务在后台一直运行,要么停止这个服务。而不能让程序在前台后台之间切换。而 Linux 提供了 fg 和 bg 命令,可以轻松调度正在运行的任务。假设你发现前台运行的一个程序需要很长的时间,但是需要干其他的事情,你就可以用 Ctrl-Z ,挂起这个程序,然后可以看到系统提示(方括号中的是作业号):
[1]+ Stopped /root/bin/rsync.sh
然后我们可以把程序调度到后台执行:(bg 后面的数字为作业号)
#bg 1
[1]+ /root/bin/rsync.sh &
用 jobs 命令查看正在运行的任务:
#jobs
[1]+ Running /root/bin/rsync.sh &
如果想把它调回到前台运行,可以用
#fg 1
/root/bin/rsync.sh
这样,你在控制台上就只能等待这个任务完成了。

fg、bg、jobs、&、ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的,一旦会话结束,该任务无论是否完成也会随之结束,于是就有了下面的几种方式。
 

1.nohup

安装:

  1. which nohup ###查看/usr/bin目录下有没有nohup命令
  2. yum install coreutils ###安装
  3. ###环境配置
  4. vi ~/.bash_profile
  5. 在PATH=$PATH:$HOME/bin后面添加:/usr/bin
  6. source ~/.bashrc
  7. nohup --version ###查看版本信息

      nohup指不断地运行,是no hang up的缩写,指不间断,不挂断。运行一个进程的时候,不想让其在你退出账号时关闭,即可用nohup。nohup在不规定的情况下,所以输出内容会到nohup.out中【1】

例:

  1. '''
  2. 下面第一条代码,以python环境不间断的运行my.py这个脚本,并且将脚本输出的内容重定向输入my.log中(>>意为追加,如果用>会让其中的内容清空),my.py >> my.log 和my.py 1>>my.log相同,只是1(标准输出)被省略了,而后面的my.log 2>&1 又将2(错误内容)输入到标准输出,然后前面的标准输出又输入到my.log中,意思错误和标准内容都会输出到my.log中,其实代码可拆成两块。
  3. 第二条代码,也是一样的,将错误和标准全部丢入/dev/null中,全部销毁。
  4. '''
  5. nohup python my.py >> /usr/local/python/xxf/my.log 2>&1 &
  6. nohup tomcat.sh > /dev/null 2>&1 &
  7. nohup python -u flush.py > flush.log 2>&1 & (当前路径下生成flush.log文件,-u表示不启用python缓存)

注意此处不要在大循环里面打印日志,比如  5W次循环 log.info("xxx"),因为会占满日志,导致磁盘满

附:

  • >>是追加内容到日志文件里,只有一个>的话会覆盖源文件内容
  • &是指在后台运行
  • 2>&1是一个整体,>左右不能有空格,即将错误内容重定向输入到标准输出中去。
  • 操作系统中有三个常用的流:

  0:标准输入流 stdin
  1:标准输出流 stdout
  2:标准错误流 stderr

  一般当我们用 > console.txt,实际是 1>console.txt的省略用法;< console.txt ,实际是 0 < console.txt的省略用法。

2、screen

linux下安装:

centos:   yum install screen

ubuntu:   apt-get install screen

使用:

新建一个screen,

screen -S xiedi

这样会新开一个窗口,然后执行命令即可

python manage.py runserver 0.0.0.0:9000

重开一个窗口,运行screen ls列出所有screen进程,如果想进入已存在的一个会话,执行下面命令即可【2】,

screen -r 30299(运行中screen进程id)

同样的与此效果类似的可以查看tmux的使用,一样可以将脚本挂在后台继续运行。

3、setsid

在新session执行命令(使进程不属于接受 HUP 信号的终端的子进程,那么就不会受到 HUP 信号的影响)

使用命令

  1. setsid python a.py
  2. ps -ef | grep a.py ###后台查看进程
  3. kill -9 进程id ##结束进程

4、supervisor

supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。

安装:

  1. yum install python-setuptools
  2. easy_install supervisor
  3. apt-get install -y supervisor ##ubuntu
  4. # yum install epel-release ###centos
  5. # yum install -y supervisor
  6. # systemctl enable supervisord # 开机自启动
  7. # systemctl start supervisord # 启动supervisord服务
  8. # systemctl status supervisord # 查看supervisord服务状态
  9. # ps -ef|grep supervisord # 查看是否存在supervisord进程

   编写配置文件

配置文件放在 /etc/supervisor/conf.d 目录下。
例如:

  1. [program:mycommand]
  2. command=cat
  3. directory=/home/fenggese/
  4. user=fenggese

更新配置 supervisorctl update

启动进程的命令: supervisorctl start mycommand
终止进程的命令: supervisorctl stop mycommand
注: 终止进程后重启电脑,进程将会重启。 所以要移除某个进程,要把对应的配置删除。

总结:

守护进程(daemon)
守护进程是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。

screen 的意图只是新启动了一个会话窗口,不过因为其副作用,倒是也可以用来做后台任务。

nohup 本身不是后台运行,而是让后面的命令忽略 Linux 的终端关闭信号,需要配合 & 才是后台任务。

但以上两者都阻止不了你程序本身的逻辑代码里有错误导致的退出。假设你程序挂了,你还能 7*24 盯着服务器、随时登录上去重新执行一下 nohup + &screen 吗?而supervisor 是一个 python 写的守候进程,需要你写一个配置文件,然后他就会按照你的配置文件的要求,守候你的进程,比如失败了是否要重启啊,重启几次啊?失败了是否要发邮件啊,stdout 和 stderr 都输出到哪里啊?怎么轮换日志啊,日志多大啊,运行用户是谁啊等等,还是很方便的,甚至还有一个 web 管理页面可以给你使用.

nohup 是 linux 自带的,这个,我觉得他都不能叫做守候进程, 他只是把进程变成了后台运行程序,但是他不会守候这个进程.挂了就挂了吧.他只保证你用户会话终止时,程序不终止.

linux 下还有一个 systemd, 基本上提供 systemd 的 linux 发行版,整个 linux 的启动和服务进程依赖都是由 systemd 来管理的.配置比较简单,功能也比较简单.但是基本满足你作为守候进程的使用吧.如果你是要守候进程, systemd 和 supervisor 都可以,supervisor 这一个应用软件,通过配置行使守护进程的职责,程序或应用由于某种原因中断或挂掉的时候,它会自动的去启动或重启这个程序(通过你在配置文件里配置的启动或重启命令)来启动应用,在业界被称为:永不宕机的神器(守护神)【3】。

 未完待续!

参考文件:

1、https://www.cnblogs.com/kex1n/p/8285343.html

2、https://www.jianshu.com/p/2a29d8243f43

3、https://www.h5w3.com/38135.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/894341
推荐阅读
相关标签
  

闽ICP备14008679号