&符号

这两天要在一直运行一个Python脚本,当然就想到了在命令后面加&符号

$ python /data/python/server.py >python.log &

说明:

1、 > 表示把标准输出(STDOUT)重定向到 那个文件,这里重定向到了python.log
2、 & 表示在后台执行脚本
这样可以到达目的,但是,我们退出shell窗口的时候,必须用exit命令来退出,否则,退出之后,该进程也会随着shell的消失而消失(退出、关闭)

使用nohup(not hang up)

$ nohup python /data/python/server.py > python.log3 2>&1 &

说明:

1、1是标准输出(STDOUT)的文件描述符,2是标准错误(STDERR)的文件描述符1> python.log 简化为 > python.log,表示把标准输出重定向到python.log这个文件
2、2>&1 表示把标准错误重定向到标准输出,这里&1表示标准输出
为什么需要将标准错误重定向到标准输出的原因,是因为标准错误没有缓冲区,而STDOUT有。
这就会导致 commond > python.log 2> python.log 文件python.log被两次打开,而STDOUT和 STDERR将会竞争覆盖,这肯定不是我门想要的
3、好了,我们现在可以直接关闭shell窗口(我用的是SecureCRT,用的比较多的还有Xshell),而不用再输入exit这个命令来退出shell了
$ ps aux|grep python
tomener 1885  0.1  0.4  13120  4528 pts/0    S    15:48   0:00 python /data/python/server.py
tomener 1887  0.0  0.0   5980   752 pts/0    S+   15:48   0:00 grep python

现在当我们直接关闭shell窗口,再连接上服务器,查看Python的进程,发现进程还在

但是,在python运行中却查看不到输出!

因为:

python的输出有缓冲,导致python.log3并不能够马上看到输出。

使用-u参数,使得python不启用缓冲。

所以改正命令,就可以正常使用了

$ nohup python -u test.py > out.log 2>&1 &

nohup和&的区别

  • & : 指在后台运行
  • nohup : 不挂断的运行,注意并没有后台运行的功能,,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行
    &是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出

那么,我们可以巧妙的吧他们结合起来用就是

nohup COMMAND &

这样就能使命令永久的在后台执行

例如:

  1. sh test.sh &

将sh test.sh任务放到后台 ,即使关闭xshell退出当前session依然继续运行,但标准输出和标准错误信息会丢失(缺少的日志的输出)

将sh test.sh任务放到后台 ,关闭xshell,对应的任务也跟着停止。

  1. nohup sh test.sh

sh test.sh任务放到后台,关闭标准输入,终端不再能够接收任何输入(标准输入),重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell退出当前session依然继续运行。

  1. nohup sh test.sh &

sh test.sh任务放到后台,但是依然可以使用标准输入,终端能够接收任何输入,重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell退出当前session依然继续运行。

任务前后台的切换

shell支持作用控制,有以下命令实现前后台切换:

  1. command &让进程在后台运行
  2. jobs 查看后台运行的进程
  3. fg %n 让后台运行的进程n到前台来
  4. bg %n 让进程n到后台去
  5. kill %n 杀死job

“n” 为jobs命令查看到的job编号,不是进程编号.
  fg、bg、jobs、&、ctrl + z 都是跟系统任务有关的

一、&

这个用在一个命令的最后,可以把这个命令放到后台执行

python test.py &

二、ctrl + z

可以将一个正在前台执行的命令放到后台,并且暂停

三、jobs

查看当前有多少在后台运行的命令

jobs
[1]-  Stopped                 vim ~/.bash_profile
[2]+  Stopped                 vim /etc/profile

四、fg

将后台中的命令调至前台继续运行
如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)。

fg %1

五、bg

将一个在后台暂停的命令,变成继续执行
如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)。

bg %1
[1]+ vim ~/.bash_profile &[1]+  Stopped                 vim ~/.bash_profile

六、kill

杀死jobs中具体jobnumber

jobs
[1]+  Stopped                 vim ~/.bash_profile
[2]-  Stopped                 vim /etc/profile杀死 jobnumber=1:
kill %1[1]+  Stopped                 vim ~/.bash_profile
在查询下jobs:
jobs
[2]+  Stopped                 vim /etc/profile

补充

最近使用nohup创建了一个后台进程,默认日志输出到了nohup.out文件中,程序跑起来也就没再管, 过了大约一周,发现硬盘空间不够了,于是查找原因,发现这个nohup.out文件已经到了70G了,导致硬 盘空间不足了。
解决方案 :

只输出错误信息到日志文件

nohup ./program >/dev/null 2>log &

什么信息也不要

nohup ./program >/dev/null 2>&1 &

文章转自

linux后台运行python脚本相关推荐

  1. 后台运行python脚本

    在服务器运行python脚本时,如果使用平常的python aaa.py,当你关闭xshell工具后,程序也就停止了,这时需要让服务器后台运行python脚本,本机关机后,服务器也会运行,这时你只需睡 ...

  2. linux 下后台运行python脚本

    1.运行python脚本命令 nohup python -u pix2pix.py > out.log 2>&1 & 2.查看正在输出的日志(动态打印): tail -f ...

  3. Linux定时运行Python脚本

    Linux–CentOS定时运行Python脚本 最近公司的项目开始进入运营阶段,数据库的记录也开始多了起来.看了postgresql的自动清理好像不太符合需求,暂定对接口请求记录表保留3个月内的记录 ...

  4. Linux后台运行python程序并输出到日志文件

    后台运行python程序并标准输出到文件 现在有test.py程序要后台部署, 里面有输出内容 使用命令: nohup python -u test.py > test.log 2>&am ...

  5. windows连接linux服务器并后台运行python脚本

    将本地文件上传linux服务器: D:\Program Files\PuTTY>pscp D:\python\pythonwork\jobui\rpxcorp.py root@47.104.10 ...

  6. Linux上后台运行python脚本,并查看脚本日志

    ps -ef | grep xxx.py #查看xxx.py脚本是否在运行#后台运行xxx.py脚本,并输出日志到nohup.out文件,当前命令这个文件与xxx.py位置在一个目录下 nohup p ...

  7. linux使得python后台运行,linux 下后台运行python脚本

    &符号 这两天要在服务器端一直运行一个Python脚本,当然就想到了在命令后面加&符号 $ python /data/python/server.py >python.log & ...

  8. linux运行python脚本语句,如何在Linux下运行Python脚本

    1.使用python的IDEL运行python 如果你的Linux安装了python,Ctrl+Alt+T打开Terminal后输入指令:python,会出现>>>,这个时候就可以在 ...

  9. 如何在Linux下运行Python脚本

    1.使用python的IDEL运行python 如果你的Linux安装了python,Ctrl+Alt+T打开Terminal后输入指令:python,会出现>>>,这个时候就可以在 ...

最新文章

  1. 联想确认再次裁员 称调整主要分布在海外
  2. 控制台怎么查看错误的详细信息_Java 程序该怎么优化?命令篇
  3. OpenAI挑战DOTA 2世界冠军OG,这是赌上人类尊严的决战
  4. 21天Jenkins打卡Day7-打包git代码
  5. 动态ip解析 linux,ddwrt路由/linux动态解析ip(ddns)到dnspod配置
  6. VS2010制作dll
  7. python学习之-- redis模块基本介绍
  8. 使用定位技术,边界判断要谨慎
  9. Python简单方法实现英文文本词频统计
  10. linux怎么查看hwaddr_Linux 查看网卡的MAC地址
  11. 如何在 Kubernetes 集群中集成 Kata
  12. 数字图像处理 - 相关资源整理
  13. Linux 打包可执行文件
  14. 大学计算机应用基础屈立成,五笔字型输入法教程-计算机应用基础教学网.PDF
  15. 《保健养生》---保健专家齐国力[2]
  16. 图像检索中一些特征索引技术
  17. 零基础学Arcgis(七)|空间数据采集与管理(4)数据检查
  18. 0基础自学软件测试,10分钟从测试9个阶段带你入门【建议收藏】
  19. DPK8300E+设置 (打印乱码)
  20. 游戏角色制作行业标准?点开看看吧,深度技术好文

热门文章

  1. E - Water Distribution
  2. 文件上传测试 bugku
  3. 【Luogu】P3950部落冲突(树链剖分)
  4. Spring Boot修改内置Tomcat端口号
  5. 16.如何做到webpack打包vue项目后,可以修改配置文件
  6. 【Oracle】PL/SQL 显式游标、隐式游标、动态游标
  7. win8安装msi出现提示2503 2502的错误代码
  8. 用 CSS 做轮播图
  9. linux命令 - alias
  10. 中缀表达式生成二叉树