骆小刚:Linux后台服务启动方式systemd、daemon、nohup大比拼

作者简介

骆小刚,现就职于深圳市普康电子有限公司,高级软件工程师。负责arm下u-boot、kernel开发,APP框架搭建,底层软件开发,算法开发,性能优化等。对开源软件有浓厚兴趣。

骆小刚:Linux后台服务启动方式systemd、daemon、nohup大比拼

gcc simple-server.c  -o simple-server

1.2 配置服务

编辑服务配置文件simple-server.service

vim simple-server.service 

骆小刚:Linux后台服务启动方式systemd、daemon、nohup大比拼

会创建一个指向配置文件/lib/systemd/system/simple-server.service的符号链接

/etc/systemd/system/multi-user.target.wants/simple-server.service

1.4 开启服务

sudo systemctl start simple-server

1.5 服务状态

1.5.1服务与终端的关系

pstree

骆小刚:Linux后台服务启动方式systemd、daemon、nohup大比拼

可以看到服务程序忽略了SIGPIPE信号。

服务没有控制终端(tty为“)。

1.5.3 服务的运行日志

sudo lsof -p 6213

骆小刚:Linux后台服务启动方式systemd、daemon、nohup大比拼

我可以看到simple-server服务已经loaded,并且处于active状态。还可以看到PID、Tasks数量、服务管理日志等。

1.6 关闭服务

sudo systemctl stop simple-server

1.7 停用服务

 sudo systemctl disable simple-server

2. daemon启动服务

2.1 编写代码

vim daemon.c 

骆小刚:Linux后台服务启动方式systemd、daemon、nohup大比拼

骆小刚:Linux后台服务启动方式systemd、daemon、nohup大比拼

没有屏蔽信号。

控制终端tty为“

2.3.3 服务的运行日志

骆小刚:Linux后台服务启动方式systemd、daemon、nohup大比拼

gcc nohup.c -o nohup

3.2 启动服务

nohup命令启动这个名字也叫nohup的程序

(注意后面一个nohup是上面写的那个很简单的程序的名字)

nohup ./nohup

3.3 服务状态

3.3.1服务与终端的关系

骆小刚:Linux后台服务启动方式systemd、daemon、nohup大比拼

服务的父进程是启动该服务的bash,和bash在一个会话组。

3.3.2 服务的信号处理

骆小刚:Linux后台服务启动方式systemd、daemon、nohup大比拼

输入被重定向到/dev/null,输出、出错为当前目录下的nohup.out,格式没有带时间,不便于分析问题。

3.4 服务关闭

killall nohup

4. 总结

4.1 后台运行服务的基本需求

基本需求:

  •  脱离终端(终端关闭时,服务不能关闭)

  •  处理输入、输出、出错描述符

4.1.1  systemd

自己本身就是一个init或者user级的subreaper;

系统级systemd启动的服务以root权限运行;

重定向输入到/dev/null,输出、出错通过socket发给系统日志模块。

4.1.2 daemon

通过fork后父进程exit,让子进程托孤给subreaper,实现在后台运行服务。

重定向输入、输出、出错到/dev/null.

源码参考:

https://github.com/lattera/glibc/blob/master/misc/daemon.c

4.1.3 nohup

  通过忽略终端关闭时的广播信号SIGHUP,实现在后台运行服务。

重定向输入到/dev/null,输出、出错重定向到当前目录下的nohup.out文件,

4.2 后台运行服务的高级需求

高级需求:

  • 方便分析问题的服务运行日志记录

  •  服务管理的日志

  •  异常退出时可以根据需要重新启动

daemon不能实现上面的高级需求。

nohup 只能记录服务运行时的输出和出错日志。

只有systemd能够实现上述所有需求。

 

默认的日志中增加了时间、用户名、服务名称、PID等,非常人性化。

还能看到服务运行异常退出的日志。

还能通过/lib/systemd/system/下的配置文件定制各种需求。

还有非常非常多强大的功能等着你去探索:

https://www.freedesktop.org/software/systemd/man/systemd.html

4.3 systemd是目前linux管理后台服务的主流方式

Linux阅码场原创精华文章汇总

更多精彩,尽在”Linux阅码场”,扫描下方二维码关注

骆小刚:Linux后台服务启动方式systemd、daemon、nohup大比拼

点一点右下角”在看”,为阅码场打Call~

文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux24701 人正在系统学习中

来源:宋宝华

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年1月17日
下一篇 2020年1月17日

相关推荐