标签: systemd

为什么我的 PostgresQL 11 数据库集群在通过 systemctl 启动后立即关闭?

我在 Debian 9 上通过 apt-get 安装了 PostgresQL 11。安装后,我删除了默认数据库集群,并删除了自动启动该集群的所有服务。我现在已经运行 initdb 在自定义位置初始化一个新集群,并编写并启用了 systemd .service 文件以自动运行该文件。

我遇到了一个问题,机器启动时服务成功启动,但随后数据库立即关闭,服务立即停止。当我使用 systemctl 手动启动服务时,也会发生同样的情况。

.服务文件:

[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)

[Service]
Environment=PGDATA=/home/(user)/.db
Environment=PGLOG=/home/(user)/postgres.log
Environment=PGSTARTTIMEOUT=270

Type=notify
User=(user)
Group=(group)
ExecStart=/usr/lib/postgresql/11/bin/pg_ctl start -D ${PGDATA} -l ${PGLOG} -t ${PGSTARTTIMEOUT}
ExecStop=/usr/lib/postgresql/11/bin/pg_ctl stop -D ${PGDATA} -m fast
ExecReload=/usr/lib/postgresql/11/bin/pg_ctl reload -D ${PGDATA}
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=300

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

手动启动集群的命令:

su (user) -c '/usr/lib/postgresql/11/bin/pg_ctl start -D /home/(user)/.db -l /home/(user)/postgres.log -t 270'
Run Code Online (Sandbox Code Playgroud)

通过 systemctl 启动时的 PostgreSQL 日志:

2019-01-13 11:36:16.506 EST [1469] 日志:监听 IPv4 地址“127.0.0.1”,端口 5432

2019-01-13 11:36:16.508 EST …

postgresql systemd debian-stretch

3
推荐指数
1
解决办法
3017
查看次数

使用脱机 fstab 磁盘继续启动 (linux/systemd)

在启动过程中,使用 systemd 之前版本的 Ubuntu 服务器(例如 14.04),如果非关键 fstab 磁盘脱机,系统将等待挂载该磁盘(30 s iirc),超时并继续启动。

自从从 16.04 升级到 Ubuntu 18.04 以来,由于 systemd 的依赖关系,我认为缺少的 fstab 磁盘会停止启动过程,导致启动时出现“紧急模式...按 Enter 进行维护”提示。

  1. 有没有办法改变这种默认行为?IE。只是继续启动还是选择将磁盘标记为非关键磁盘?
  2. 如果做不到这一点,是否有一个简单的 systemctl 命令可以从维护中“继续启动忽略丢失的磁盘”?

linux ubuntu boot fstab systemd

3
推荐指数
1
解决办法
3590
查看次数

监听 tcp 127.0.0.1:9090: 绑定: 地址已在使用中

如何找到哪个服务正在使用端口?

\n\n
# cat /etc/redhat-release \nRed Hat Enterprise Linux Server release 7.6 (Maipo)\n# netstat -natpv | grep 9090\ntcp6       0      0 :::9090                 :::*                    LISTEN      1/systemd           \n# \n
Run Code Online (Sandbox Code Playgroud)\n\n

请指教。

\n\n
\n\n
# systemctl status cockpit.service \n\xe2\x97\x8f cockpit.service - Cockpit Web Service\n   Loaded: loaded (/usr/lib/systemd/system/cockpit.service; static; vendor preset: disabled)\n   Active: inactive (dead) since Mon 2019-06-10 12:43:51 EDT; 4 days ago\n     Docs: man:cockpit-ws(8)\n Main PID: 15922 (code=exited, status=0/SUCCESS)\n\nJun 10 12:41:48 X.X.X systemd[1]: Starting Cockpit Web Service...\nJun 10 12:41:48 X.X.X systemd[1]: Started Cockpit Web …
Run Code Online (Sandbox Code Playgroud)

systemd

3
推荐指数
1
解决办法
8838
查看次数

systemctl状态日志输出

当我同时运行多个服务的 systemctl status 时,就像

sudo systemctl status myservice1 myservice2 myservice3
Run Code Online (Sandbox Code Playgroud)

我看到了输出,但最后我看到了

lines 1-48/48 (END)
Run Code Online (Sandbox Code Playgroud)

或者如果参数更多,输出更大

lines 1-62
Run Code Online (Sandbox Code Playgroud)

我可以滚动或分页输出并使用q退出。

是否可以更改此行为,立即打印所有日志输出并退出命令?

debian bash systemd

3
推荐指数
1
解决办法
7042
查看次数

如何在启动时将 minikube start 作为 Linux 服务运行?

这个问题与如何将非管理命令安排为 systemd 服务?

\n

我有以下 minikube.service 文件:

\n
[Unit]\nDescription=Runs minikube on startup\nAfter=vboxautostart-service.service vboxballoonctrl-service.service vboxdrv.service vboxweb-service.service\n\n[Service]\nType=forking\nExecStart=/usr/local/bin/minikube start\nUser=mark\nGroup=mark\n\n[Install]\nWantedBy=multi-user.target\n
Run Code Online (Sandbox Code Playgroud)\n

当我从 shell 手动启动它时,它工作正常:

\n
mark@minikube-vm:~$ sudo systemctl start minikube.service\nmark@minikube-vm:~$ minikube ip\n192.168.99.100\nmark@minikube-vm:~$ systemctl status minikube.service\n\xe2\x97\x8f minikube.service - Runs minikube on startup\n   Loaded: loaded (/etc/systemd/system/minikube.service; enabled; vendor preset: enabled)\n   Active: active (running) since Fri 2020-09-25 17:32:48 UTC; 34min ago\n  Process: 8388 ExecStart=/usr/local/bin/minikube start (code=exited, status=0/SUCCESS)\n    Tasks: 46 (limit: 19141)\n   CGroup: /system.slice/minikube.service\n           \xe2\x94\x9c\xe2\x94\x808434 /usr/lib/virtualbox/VBoxXPCOMIPCD\n           \xe2\x94\x9c\xe2\x94\x808439 /usr/lib/virtualbox/VBoxSVC --auto-shutdown\n           \xe2\x94\x9c\xe2\x94\x808618 /usr/lib/virtualbox/VBoxHeadless --comment minikube --startvm 6ec91432-0f09-4fdc-9976-6f736b15c37f --vrde config\n …
Run Code Online (Sandbox Code Playgroud)

systemd minikube

3
推荐指数
1
解决办法
1万
查看次数

对于内部包含 systemd 的 nspawn 容器,“无法获取 shell PTY:协议错误”

我创建容器

# debootstrap --variant=minbase --include=systemd,iproute2 buster "/var/lib/machines/test"
Run Code Online (Sandbox Code Playgroud)

然后我运行它:

# systemd-nspawn --machine test
Run Code Online (Sandbox Code Playgroud)

仅用于测试目的。容器启动,当我尝试访问它时,machinectl出现错误:

# machinectl shell test
Failed to get shell PTY: Protocol error
Run Code Online (Sandbox Code Playgroud)

经过一番谷歌搜索后,我意识到有一个旧错误导致了这种行为,但这在systemd v226中得到了修复,并且/usr/bin/systemd --version在我的 debian 上显示了版本 246。

我可以使用“非 systemd 容器”方法进入容器,但是我的容器运行 systemd,我应该能够使用machinectl.

containers systemd

3
推荐指数
1
解决办法
2455
查看次数

从 systemd 中删除单元/服务文件的规范方法是什么?

systemd 批准的用于从中删除例如 sidekiq.service 的方法是什么/etc/systemd/system/

请注意,关于此主题有许多相关讨论,例如我已经阅读过的讨论: https ://superuser.com/questions/513159/how-to-remove-systemd-services

我的困惑之处在于,上述讨论中最常见的答案要求用户rm从多个位置手动文件,但后来的答案表明这systemctl disable <service>应该与手动删除文件具有相同的效果。

根据我自己的测试systemctl disable sidekiq,我发现单元文件之后sidekiq.service仍保留在/etc/systemd/system

我知道,从理论上讲,rm在一堆位置上使用应该可以解决问题,但我想知道真正熟悉systemdsystemctl会这样做的人是如何做到这一点的。这种暴力真的有必要吗?或者是否有systemctl为此目的的实际命令?

systemd

3
推荐指数
1
解决办法
2865
查看次数

使 systemd 分页器不进行水平滚动,而是换行到下一行

默认情况下,Ubuntu 20.04 焦点上的 systemd (v245),如果我这样做的话systemctl status $THING,并且输出行比我的屏幕长,那么默认分页器(更少?)将进行水平滚动。我宁愿额外的文本位于以下几行(“自动换行”)

我可以设置什么环境变量来将水平滚动更改为“将行的其余部分放在下一行”?

我知道systemctl --no-pager $THINGorsystemctl status $THING | cat在这种情况下会起作用,但每次都需要输入额外的文本。我希望systemctl status $THING始终能够工作而无需添加额外的内容。

terminal systemd

3
推荐指数
2
解决办法
1968
查看次数

为通过 stdout 和 stderr 记录到日志的消息设置 INFO/ERROR 优先级?

我们有许多生产应用程序(第一方和第三方),它们将日志记录留给运行应用程序的进程,而只记录stdoutforINFOstderrforERROR日志(即只有 2 个日志优先级:)INFO|ERROR

对于应用程序的 systemd 服务单元,可以这样设置:

StandardOutput=journal
StandardError=journal
Run Code Online (Sandbox Code Playgroud)

这使得 DevOps 可以通过 systemd 单元和日志来管理一切,以便于集中日志收集、监控任何内容……并且他们不需要担心为部署的每个应用程序定位和解析不同格式/位置的不同日志。

systemd 的日志具有与 syslog 的 7 级消息优先级系统兼容的消息优先级系统。 INFO是水平6ERROR是水平3。有关更多详细信息,请参阅参考资料。

问题是... systemd/journal 显然不区分从 stdout 与 stderr 写入日志的消息。stdout 和 stderr 消息都以默认优先级 6 ( ) 写入日志INFO

示例:“精美应用程序”

/opt/log-test.sh

StandardOutput=journal
StandardError=journal
Run Code Online (Sandbox Code Playgroud)

/etc/systemd/system/log-test.service

[Unit]
Description=log test for journal

[Service]
Type=simple

ExecStart=/opt/log-test.sh

StandardOutput=journal
StandardError=journal
SyslogIdentifier=log-test
Run Code Online (Sandbox Code Playgroud)

运行它并检查日志

$ systemctl start log-test
$ journalctl -u log-test
-- Logs …
Run Code Online (Sandbox Code Playgroud)

monitoring logging systemd journald centralized-logging

3
推荐指数
1
解决办法
2370
查看次数

ntsysv 的 systemd 等价物是什么?

现在 RHEL 7 使用 systemd,该ntsysv工具只显示我系统上的一些服务。是否有等效于ntsysv哪个systemd将允许我显示/配置系统上的所有服务?

我只是一个命令行用户,所以我想要一个 TUI。

linux systemd rhel7

2
推荐指数
1
解决办法
2927
查看次数