我的操作系统是 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
个人感觉:
有没有人有这方面的经验?
1
jasontse 2017-03-06 16:11:25 +08:00 via iPad
Type 改成 forking
|
2
whx20202 OP @jasontse 能不能解释一下为什么呢?
我之前也尝试搜过,有人说 simple 就可以了还说 forking 只是兼容老版本的程序,这个 forking 到底是什么意思啊 |
4
jasontse 2017-03-06 16:15:19 +08:00 via iPad 3
@whx20202 在前台会阻塞的程序可以用 simple ,后台服务用 forking 。如果你想了解什么是 fork 请搜索 Linux Daemon 。
|
5
chust 2017-03-06 16:15:43 +08:00 1
|
6
SpicyCat 2017-03-06 16:50:05 +08:00
如果有耐心,看看 systemd 系列的 manpage, 讲得很详细。
|
8
ryd994 2017-03-07 09:18:12 +08:00 via Android
因为 squid 默认 fork 到后台执行
simple 只检查前台进程,前台退了就意味结束了 我记得加-N 可以不 fork forking 会尝试检测 fork 出来的后台 此外还可以通过 pidfile 显式指定 对于执行一遍就一直有效的,比如 RC local 脚本, one-shot |
9
loveminds 2017-03-07 12:59:44 +08:00
因为这类东西的原理是由前台进程派生出守护进程后就退出,而 simple 只能检测你运行进程的状态
|
10
loveminds 2017-03-07 13:00:58 +08:00
“感觉它会在服务启动的一瞬间就去执行 stop 的相关任务”正是这种方式的显著特点,派生出守护进程后,控制台进程退出
|