Linux下将python脚本封装成服务
将脚本封装成服务方便后台运行
nohup后台运行
nohup指不断地运行,是no hang up的缩写,指不间断,不挂断。运行一个进程的时候,不想让其在你退出账号时关闭,即可用nohup。nohup在不规定的情况下,所以输出内容会到nohup.out中
运行示例:
1 | nohup python my.py >> my.log 2> |
>
和>>
都是将输出重定向到指定位置(如文件),区别在于前者重写文件,后者追加到文件/dev/null
相当于一个垃圾箱,如果不想知道输出内容,可以指定输出到次数关于0、1、2
0
表示stdin标准输入,用户键盘输入的内容1
表示stdout标准输出,输出到显示屏的内容2
表示stderr标准错误,报错内容2>&1
是一个整体,>
左右不能有空格,即将错误内容重定向输入到标准输出中去。&
为后台运行
封装成system服务
这个方法只适用于使用systemd的Linux系统,现在流行的Linux发行版都使用systemd。后台服务程序是随系统自启动的,我们只要把Python脚本配置为服务就行了。需要注意的一点是你Python脚本的启动时机,它依赖不依赖其他服务(网络连接、一些分区的挂载等等)。
假设我们想将一个位置为/home/autorun.py
的python脚本封装成服务。
创建Unit配置文件
1 | vim /lib/systemd/system/autorun.service |
向文件中写入以下内容:
1 | [Unit] |
上面定义了一个叫 Test Service 的服务,它在multi-user环境起来之后运行;ExecStart参数指定我们要运行的程序,注意使用绝对路径;idle确保脚本在其他东西加载完成之后运行,它的默认值是simple。为了获得脚本的输出信息,我们可以重定向到文件:
1 | ExecStart=/usr/bin/python /home/snail/autorun.py > /home/snail/autorun.log 2>&1 |
之后更改配置文件的权限:
1 | sudo chmod 644 /lib/systemd/system/autorun.service |
使配置文件生效
1 | systemctl daemon-reload |