ubuntu18启动python_ubuntu 18.04 python脚本 开机自启

总的解决思路

编写xxx.service文件导入到/etc/systemd/system,最终通过systemctl start xxx.service启动服务,通过systemctl enable xxx.service实现开机自启动。

如何编写自己的xxx.service文件?

如何后台运行python脚本?python程序中print的输出则么办?

1.如何编写自己的xxx.service文件?1

详细的可以参考这里

/etc/systemd/system主要有四种类型文件.mount,.service,.target,.wants

.mount文件定义了一个挂载点,[Mount]节点里配置了What,Where,Type三个数据项

.service文件定义了一个服务,分为[Unit],[Service],[Install]三个小节。

.target定义了一些基础的组件,供.service文件调用

.wants文件定义了要执行的文件集合,每次执行,.wants文件夹里面的文件都会执行

[Unit]

Description:描述,

After:在network.target,auditd.service启动后才启动

ConditionPathExists: 执行条件

[Service]

EnvironmentFile:变量所在文件

ExecStart: 执行启动脚本

Restart: fail时重启

[Install]

Alias:服务别名

WangtedBy: 多用户模式下需要的

2.运行python脚本

在service文件中添加执行命令即可

ExecStart:/usr/bin/python ./client_r.py

3.python程序中print的输出则么办?-输出重定向2

以下命令实现:指定python运行脚本,将本应该输出到终端的文字重定向到log.txt

sudo /usr/bin/python3 -u ./client_r.py > log.txt 2>&1

-u:无缓存,运行过程输出立刻进入到log.txt。正常情况python的输出先到缓存区,运行过程中的输出不能立即在log中看到

2>&1:将标准输出或者错误输出写入到指定文件,如果该文件中已包含数据,新数据将写入到原有内容的后面。注意, 2>&1 是一体的,可以认为是固定写法

附录

systemd原理3

service配置文件45

Unit:定义与unit类型无关的通用选项;用于提供unit的描述信息,unit行为及依赖关系;

Service:与特定类型相关的专用选项;此处为service类型;

Install:定义由”systemctl enable”以及”systemctl disable”命令在实现服务启动或禁用时用到的一些选项。

[Unit]

After -表示服务需要在***服务启动之后执行,无依赖

Before -表示服务需要在***服务启动之前执行,无依赖

Wants -弱依赖关系

Requires -强依赖关系***停止之后本服务也必须停止

[Service]

EnvironmentFile -环境参数文件,EnvironmentFile=/etc/sysconfig/sshd 以key=value的形式保存,以$key形式读取

ExecStart -启动进程时执行的命令

ExecReload -重启服务时执行的命令

ExecStop -停止服务时执行的命令

ExecStartPre -启动服务之前执行的命令

ExecStartPost -启动服务之后执行的命令

ExecStopPost -停止服务之后执行的命令

Type

simple(默认值)-ExecStart字段启动的进程为主进程

forking -ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程

oneshot -类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务

dbus -类似于simple,但会等待 D-Bus 信号后启动

notify -类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务

idle -类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合

KillMode

control-group(默认值)-当前控制组里面的所有子进程,都会被杀掉

process -只杀主进程

mixed -主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号

none -没有进程会被杀掉,只是执行服务的 stop 命令

Restart

no(默认值)-退出后不会重启

on-success -只有正常退出时(退出状态码为0),才会重启

on-failure -非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启

on-abnormal -只有被信号终止和超时,才会重启

on-abort -只有在收到没有捕捉到的信号终止时,才会重启

on-watchdog -超时退出,才会重启

always -不管是什么退出原因,总是重启

[Install]

Alias -别名,可使用systemctl restart Alias.service

RequiredBy -被哪些units所依赖,强依赖;

WantedBy -被哪些units所依赖,弱依赖;

注:

所有的启动设置之前,都可以加上一个连词号(-),表示"抑制错误",即发生错误的时候,

不影响其他命令的执行。比如,EnvironmentFile=-/etc/sysconfig/sshd(注意等号后面的那个连词号),就表示即使/etc/sysconfig/sshd文件不存在,也不会抛出错误。

理解:service ssh start,start是作为传入参数传到ssh.service6

https://www.cnblogs.com/shijingjing07/p/9301590.html ↩︎

http://c.biancheng.net/view/5956.html ↩︎

https://www.ibm.com/developerworks/cn/linux/1407_liuming_init3/index.html ↩︎

https://www.linuxidc.com/Linux/2019-08/159995.htm ↩︎

http://www.178linux.com/49806 ↩︎

http://www.mikewootc.com/wiki/linux/usage/ubuntu_service_usage.html ↩︎

你可能感兴趣的:(ubuntu18启动python_ubuntu 18.04 python脚本 开机自启)