标签: systemd

Redis 不以 systemctl 开头

我已经在 ubuntu 16.04 机器上安装了 redis,如果我运行/usr/local/bin/redis-server /etc/redis/cluster/7000/redis.conf它,它会启动并且我可以毫无问题地连接到它。

但是我想使用它来启动它systemctl start redis,所以我在以下位置创建了以下文件/etc/systemd/system/redis7000.service

[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/cluster/7000/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always

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

并且 redis 配置已supervised systemd设置

我认为看起来不错,但我收到以下错误:

Jan 19 14:54:27 ip-172-31-42-18 systemd[1]: Started Redis In-Memory Data Store.
Jan 19 14:54:27 ip-172-31-42-18 redis-server[21661]: 21661:C 19 Jan 14:54:27.680 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
Jan 19 14:54:27 ip-172-31-42-18 redis-server[21661]: 21661:C 19 Jan 14:54:27.680 # Redis version=4.0.6, bits=64, commit=00000000, modified=0, pid=21661, just started …
Run Code Online (Sandbox Code Playgroud)

ubuntu redis systemd systemctl

15
推荐指数
2
解决办法
6万
查看次数

在 docker 容器内运行 systemd (arch linux)

我正在尝试查看是否可以在 docker 容器(在容器中运行 arch linux)中运行 systemd。

我启动 docker 的所有功能,并在 cgroups 中绑定 mount:

docker run -it --rm --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro ..
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试运行 systemd 二进制文件:

Trying to run as user instance, but the system has not been booted with systemd.
Run Code Online (Sandbox Code Playgroud)

试图找出如何正确地将东西初始化到 systemd 开始。

arch-linux systemd docker

14
推荐指数
2
解决办法
4万
查看次数

如何在 CentOS 7 上正确使用 kexec 和 systemd?

我想使用 kexec 来加速我的 CentOS 7 机器的重启。我怎样才能以与现有关闭/重启 systemd 目标很好地集成的方式做到这一点?这样做的正确(官方)方法是什么?

centos systemd

14
推荐指数
2
解决办法
6386
查看次数

systemd 在正常运行 18 天后使用 4GB RAM

我有一个运行 CentOS 7 的 Web 服务器,经过几周的正常运行时间,systemd 进程在该服务器上使用了近 4 GB 的 RAM。RAM 使用量以每天约 200MB 的速度稳步增长。该进程以及 systemd-logind 和 dbus-daemon 等相关进程在大部分时间也使用相当大的 CPU 块。我的另一个使用“init”而不是 systemd 的 CentOS 6 服务器没有这样的资源使用。

在下面的顶部示例中,在没有其他进程运行的正常 Web 服务期间,systemd、systemd-logind、systemd-journal 和 dbus-daemon 总共使用了 10.7% 的四核 CPU,而 systemd 消耗了 19%系统的 16GB 内存。这不是正常行为,经过四处搜索后,我没有发现其他人有此问题。什么可能导致这种资源占用?任何建议,将不胜感激。

在空闲期间从顶部输出(Web 服务除外):

top - 08:51:31 up 16 days, 13:43,  2 users,  load average: 1.84, 1.39, 1.07
Tasks: 297 total,   2 running, 295 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.6 us,  3.6 sy,  0.0 ni, 90.6 id,  0.1 wa,  0.0 hi,  0.1 …
Run Code Online (Sandbox Code Playgroud)

linux kernel systemd

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

在无头系统上启动共享会话 D-Bus 的 systemd 服务

我需要帮助在无头 Linux 系统上启动通过会话(不是系统)D-Bus 进行通信的服务。关键是没有人会登录无头系统。

到目前为止,我已经能够在三个不同的终端中代表未登录的用户(“其他用户”)启动 D-Bus 守护程序并测试 D-Bus 通信:

在第一个终端中,我为“otheruser”启动了一个 D-Bus 守护进程:

$ sudo -u otheruser dbus-daemon --session --print-address 1
unix:abstract=/tmp/dbus-a5cU7r4IHc,guid=6c0a9bbfd02f5f68da0fe32f5a5e0a48
Run Code Online (Sandbox Code Playgroud)

在第二个终端中,我使用上述 DBUS_SESSION_BUS_ADDRESS 响应启动 D-Bus 服务器应用程序:

$ sudo -u otheruser DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-a5cU7r4IHc,guid=6c0a9bbfd02f5f68da0fe32f5a5e0a48" /usr/bin/my-dbus-service
Run Code Online (Sandbox Code Playgroud)

然后,在第三个终端中,我可以测试连接:

$ sudo -u otheruser DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-a5cU7r4IHc,guid=6c0a9bbfd02f5f68da0fe32f5a5e0a48" gdbus introspect --session --dest com.mycompany.myappname --object-path /com/mycompany/interface
Run Code Online (Sandbox Code Playgroud)

但是,我想通过 systemd 启动 D-Bus 服务器应用程序以及一些客户端 D-Bus 服务。如何通过 systemd 启动 D-Bus 会话,以便将其 DBUS_SESSION_BUS_ADDRESS 环境变量传播到“otheruser”的 D-Bus 服务器和客户端服务?

一种可能的解决方案可能是将 dbus-daemon 的输出通过管道传输到“somefile”,然后在启动 D-Bus 服务器和客户端之前设置 DBUS_SESSION_BUS_ADDRESS=$(cat somefile)。这对我来说似乎有点太尴尬了;特别是因为我知道系统D-Bus 连接的 systemd 服务文件中的“Busname”指令有一些神奇之处。如何为“其他用户”正确启动 systemd 服务,以便这些 systemd 服务可以与会话 D-Bus 接口进行通信?

linux headless dbus systemd

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

在 EXEC 生成步骤失败...权限被拒绝

我已经阅读了很多关于此的内容,但仍然不确定为什么这不起作用。据我所知,所有目录都有正确的权限,即使所有内容都是 777,我在尝试将此程序作为服务运行时仍然被拒绝。我试图作为伺服系统运行的程序称为 xTeVe。我尝试在所有不同的目录、用户下运行它,但似乎没有任何效果。

这是单元文件:

[Unit]
Description=XTeVe For Plex
After=network.target network-online.target

[Service]
ExecStart=/root/IPTV/xteve
user=root
Restart=on-failure
RestartSec=5
StartLimitInterval=60s
StartLimitBurst=3

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

我知道这不应该以 root 身份运行,但这只是我尝试的最后一个用户

当我尝试启动服务时,我得到了这个:

14:20 xteve.service: Failed with result 'exit-code'.
14:02 xteve.service: Main process exited, code=exited, status=203/EXEC
14:02 xteve.service: Failed at step EXEC spawning /root/IPTV/xteve: Permission denied
14:02 xteve.service: Failed to execute command: Permission denied
14:02 Started XTeVe For Plex.
Run Code Online (Sandbox Code Playgroud)

这是文件权限:

[root@skynet IPTV]# ls -la
total 12084
drwxr-xr-x. 2 root root       19 Mar  6 13:58 .
dr-xr-x---. 5 root root      175 …
Run Code Online (Sandbox Code Playgroud)

linux permissions fedora exec systemd

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

mysql.service 的 systemd 脚本在哪里?

我实际上使用的是 MariaDB(MySQL 的替代品)。

我正在尝试对我的 systemd mysql.service 文件进行一些更改。

我可以看到它存在,因为运行 sudo systemctl 列出它并指示它已加载/活动/正在运行。

问题是我找不到要编辑的文件。根据我在各种文章中阅读的内容,我发现该文档应位于

/etc/systemd/system/multi-user.target.wants/mysql.service

但事实并非如此。我浏览了 /etc/systemd 级别的其他目录无济于事。有任何想法吗?

mysql ubuntu mariadb systemd

13
推荐指数
2
解决办法
4万
查看次数

Systemd 插件无法创建 PID 文件

我在 path 有一个 systemd-machined 插件/etc/systemd/system/systemd-machined.service.d/10-machined-pid-file.conf。当我跑步时,systemctl status systemd-machined我确实看到了线条

Drop-In: /etc/systemd/system/systemd-machined.service.d
       ??10-machined-pid-file.conf
Run Code Online (Sandbox Code Playgroud)

但是,我在 /var/run/ 中没有看到 PID 文件。基于我的访问:

[Serivce]
PIDFile=/var/run/machined.pid
Run Code Online (Sandbox Code Playgroud)

我相信创建该 PID 文件应该没有任何问题。有什么我想念的吗?

files pid systemd

13
推荐指数
2
解决办法
2万
查看次数

Systemd:如何在另一个服务启动后启动服务

我有这两项服务,一项是Google启动脚本服务,第二项是redis服务,我想在启动脚本服务启动并完成后启动redis服务,我有以下systemd配置,但我的redis服务无法启动有了这些配置

google-startup-scripts.service
[Unit]
Description=Google Compute Engine Startup Scripts
After=network-online.target network.target rsyslog.service
After=google-instance-setup.service google-network-daemon.service
After=cloud-final.service multi-user.target
Wants=cloud-final.service
After=snapd.seeded.service
Wants=snapd.seeded.service

[Service]
RemainAfterExit=yes
ExecStart=/usr/bin/google_metadata_script_runner --script-type startup
KillMode=process
Type=oneshot
StandardOutput=journal+console
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

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

[Unit]
Description=Redis In-Memory Data Store
After=google-startup-scripts.service

[Service]
Type=notify
PIDFile=/run/redis-6378.pid
ExecStart=/usr/bin/redis-getdevice /etc/redis-getdevice/6378.conf
ExecStop=/usr/bin/redis-cli -p 6378 shutdown
Restart=always

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

一旦 google-startup-script.service 运行并执行操作并进入退出状态。并且 redis 服务根本没有启动(我After在单元中使用)我在这里做错了什么

systemd ubuntu-18.04 systemd-service

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

查找 Linux 系统是如何启动的

我有一台远程服务器,运行 Linux 5.19.0-41-generic x86_64,我试图找出它是如何启动的。

显然,它不使用 systemd :

PID 1 进程是bash。

ps -p 1 -o comm=
bash
Run Code Online (Sandbox Code Playgroud)

显然,没有 GRUB,至少 /usr/sbin 中没有,并且

grub-install --version
-bash: grub-install: command not found
Run Code Online (Sandbox Code Playgroud)

我猜想,启动时并没有使用GRUB。

看起来不是虚拟机。我检查了一些文件。它似乎在裸机上运行。但配置很小:顶部仅显示少数进程,并且在 ssh 上,如果我需要更完整的功能,系统会提示我“取消最小化”。

我倾向于认为使用了 SysV:

ls /etc/init.d
apport          bluetooth  hwclock.sh  network-manager  procps                       rsync  udev
avahi-daemon    dbus       iwpmd       nfs-common       pulseaudio-enable-autospawn  saned  unattended-upgrades
binfmt-support  gdm3       kmod        pppd-dns         rpcbind                      ssh    x11-common
Run Code Online (Sandbox Code Playgroud)

但:

runlevel
unknown
Run Code Online (Sandbox Code Playgroud)

并且 /etc/inittab 不存在。

Q1:如何诊断是什么东西启动的?

Q2:如何重启?理想情况下,使用 systemd。

sudo reboot
System has not been booted with systemd as init system (PID 1). Can't …
Run Code Online (Sandbox Code Playgroud)

grub boot sysv systemd reboot

13
推荐指数
3
解决办法
2852
查看次数