用shell运行多个python代码

855 阅读2分钟

 

1、背景是

对于Linux用户而言,命令行操做咱们已经很是熟悉了。与其余流行的操做系统不一样,在Linux社区中,使用命令行与使用图形用户界面执行相似任务相比,命令行一般能够提供更优雅,更有效的解决方案。python

随着Linux社区对命令行的依赖不断增加,UNIX shell(如bash和zsh)已发展成为极其强大的工具,能够补充UNIX shell的经验。使用bash和其余相似的shell,可使用许多强大的功能,例如管道,文件名通配符以及从称为脚本的文件中读取命令的功能。shell

让咱们看一个真实的示例来演示命令行的功能。每次用户登陆服务时,其用户名都会记录到一个文本文件中。对于此示例,让咱们找出有多少惟一用户使用该服务。

有三个脚本a.py, b.py, c.py
三个都是爬虫,里面都是while(true)方式运行的,不会主动运行结束。

每次启动他们,就需要:

python a.py > logs/a.log

python b.py > logs/b.log

python c.py > logs/c.log

 

2、上linux批处理:

有点麻烦,想搞个批处理:

#!/bin/sh

python a.py > logs/a.log

python b.py > logs/b.log

python c.py > logs/c.log

 

3、发现有问题

运行发现只有一个python进程,看日志发现只有a运行了,b和c都没跑起来。
估计因为shell是顺序执行的,a没执行完,所以不会去执行b和c,查了一下果然。

4、同时运行方案

不过shell也提供了一个同时运行多个命令的方式:&符号。

于是修改为:

#!/bin/sh

python a.py > logs/a.log & python b.py > logs/b.log & python c.py > logs/c.log

就可以同时运行三个脚本了。

 

5、再加工一下

再加工一下,启动前先停止所有py进程:

#!/bin/sh

ps -ef | grep python | cut -c 9-15| xargs kill -s 9

python a.py > logs/a.log & python b.py > logs/b.log & python c.py > logs/c.log

保存为restart.sh
可执行权限:chmod +x restart.sh

 

参考网址:

  1. www.jb51.net/article/164…
  2. blog.csdn.net/xiangyong58…
  3. www.jianshu.com/p/0f72afb51…