我已经在 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) 我正在尝试查看是否可以在 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 开始。
我想使用 kexec 来加速我的 CentOS 7 机器的重启。我怎样才能以与现有关闭/重启 systemd 目标很好地集成的方式做到这一点?这样做的正确(官方)方法是什么?
我有一个运行 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 系统上启动通过会话(不是系统)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 接口进行通信?
我已经阅读了很多关于此的内容,但仍然不确定为什么这不起作用。据我所知,所有目录都有正确的权限,即使所有内容都是 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) 我实际上使用的是 MariaDB(MySQL 的替代品)。
我正在尝试对我的 systemd mysql.service 文件进行一些更改。
我可以看到它存在,因为运行 sudo systemctl 列出它并指示它已加载/活动/正在运行。
问题是我找不到要编辑的文件。根据我在各种文章中阅读的内容,我发现该文档应位于
/etc/systemd/system/multi-user.target.wants/mysql.service
但事实并非如此。我浏览了 /etc/systemd 级别的其他目录无济于事。有任何想法吗?
我在 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 文件应该没有任何问题。有什么我想念的吗?
我有这两项服务,一项是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在单元中使用)我在这里做错了什么
我有一台远程服务器,运行 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)