为什么我用 systemd 创建的服务全部都会自动关闭?

2017-03-06 16:09:48 +08:00
 whx20202

我的操作系统是 Ubuntu 16.04.02LTS 是从 14.04 升上去的 比如 squid : /usr/local/squid/sbin/squid -s 是后台启动 /usr/local/squid/sbin/squid -k shutdown 是关闭

我新增了一个文件:/lib/systemd/system/squid.service

[Unit]
Description=squid , a HTTP(S) proxy server
Documentation=https://blog.ruiruige1991.xyz
After=network.target  

[Service]
Type=simple
ExecStart=/usr/local/squid/sbin/squid -s
ExecStop=/usr/local/squid/sbin/squid -k shutdown
ExecReload=/usr/local/squid/sbin/squid -k reconfigure

然后每次执行systemctl start squid.service,发现都起不来

执行journald -xe 发现有以下日志:

Mar 06 16:04:41 NyaVM-VPS-updwugzl systemd[1]: Started squid , a HTTP(S) proxy server.
-- Subject: Unit squid.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit squid.service has finished starting up.
-- 
-- The start-up result is done.
Mar 06 16:04:41 NyaVM-VPS-updwugzl squid[21867]: Squid Parent: will start 1 kids
Mar 06 16:04:41 NyaVM-VPS-updwugzl squid[21867]: Squid Parent: (squid-1) process 21870 started
Mar 06 16:04:41 NyaVM-VPS-updwugzl squid[21868]: squid: No running copy

个人感觉:

有没有人有这方面的经验?

3698 次点击
所在节点    程序员
10 条回复
jasontse
2017-03-06 16:11:25 +08:00
Type 改成 forking
whx20202
2017-03-06 16:12:50 +08:00
@jasontse 能不能解释一下为什么呢?
我之前也尝试搜过,有人说 simple 就可以了还说 forking 只是兼容老版本的程序,这个 forking 到底是什么意思啊
whx20202
2017-03-06 16:14:40 +08:00
@jasontse 成功了!
能稍微说一下吗? 或者说个关键技术我去谷歌
jasontse
2017-03-06 16:15:19 +08:00
@whx20202 在前台会阻塞的程序可以用 simple ,后台服务用 forking 。如果你想了解什么是 fork 请搜索 Linux Daemon 。
chust
2017-03-06 16:15:43 +08:00
SpicyCat
2017-03-06 16:50:05 +08:00
如果有耐心,看看 systemd 系列的 manpage, 讲得很详细。
julyclyde
2017-03-06 21:10:36 +08:00
@whx20202 你需要关注的是“为什么 forking 是兼容老版本”而不是“ forking 是兼容老版本”
ryd994
2017-03-07 09:18:12 +08:00
因为 squid 默认 fork 到后台执行
simple 只检查前台进程,前台退了就意味结束了
我记得加-N 可以不 fork
forking 会尝试检测 fork 出来的后台
此外还可以通过 pidfile 显式指定
对于执行一遍就一直有效的,比如 RC local 脚本, one-shot
loveminds
2017-03-07 12:59:44 +08:00
因为这类东西的原理是由前台进程派生出守护进程后就退出,而 simple 只能检测你运行进程的状态
loveminds
2017-03-07 13:00:58 +08:00
“感觉它会在服务启动的一瞬间就去执行 stop 的相关任务”正是这种方式的显著特点,派生出守护进程后,控制台进程退出

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/345336

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX