标签: systemd

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万
查看次数

“多余的论据。” 在 MongoDB 配置期间执行“systemd daemon-reload”

我正在遵循中提到的说明:

在 Ubuntu 中安装和配置 MongoDB 的基本元素。在“配置 MongoDB 用户名和密码”期间,在第 4 阶段“第 4 步 - 启用 mongodb 身份验证”中出现错误。

$ systemd daemon-reload
Excess arguments.
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

mongodb systemd ubuntu-16.04

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

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
查看次数

正确设置主机名 - Amazon EC2 上的 Fedora 20

语境

我有一个在 Amazon EC2 上运行的Fedora 20 云映像(以下称为“实例”)。我对持续设置其主机名有一些不确定性。

目标

在这种情况下,假设我想将实例的主机名设置为penpen.homelinux.org。(此名称也将使用 注册到 DynDNS ddclient,但这是我们在这里不感兴趣的另一个方面。)

主机名当然可以在引导完成后手动设置(使用hostnamectl等等)。但是我们希望在第一次登录之前设置正确的主机名。

传统上,要持久地配置主机名,需要修改/etc/hostname. 不幸的是,这在这里不起作用。

默认系统行为

默认情况下,实例将其主机名设置为内部 EC2 名称。启动后,我们可以查看所有产生主机名的不同地方,我们发现:

Kernel hostname via 'sysctl'                      : ip-10-164-65-105.ec2.internal
Kernel domainname via 'sysctl'                    : (none)
File '/etc/hostname'                              : contains 'ip-10-164-65-105.ec2.internal'
File '/etc/sysconfig/network'                     : exists but has no 'HOSTNAME' line
According to the shell                            : HOSTNAME = ip-10-164-65-105.ec2.internal
Nodename given by 'uname --nodename'              : ip-10-164-65-105.ec2.internal
Hostname ('hostname')                             : ip-10-164-65-105.ec2.internal
Short hostname ('hostname --short')               : ip-10-164-65-105 …
Run Code Online (Sandbox Code Playgroud)

fedora hostname amazon-ec2 systemd fedora-20

12
推荐指数
1
解决办法
4881
查看次数

如何配置 systemd 以在重新加载时终止并重新启动守护进程?

我有一个老式的守护进程,我想使用 systemd 来控制它。当它的配置文件发生变化时,需要将其杀死并重新启动。换句话说,在编辑配置文件后,systemctl reload MYSERVICE应该终止进程并重新启动它。

尝试 1:尝试默认设置。这告诉 systemd 如何启动守护进程,而不是如何重新加载它。

[Service]
ExecStart=/usr/bin/MYSERVICE
Type=simple
Run Code Online (Sandbox Code Playgroud)

其结果是,startrestart工作,但reload给出了这样的错误:

# systemctl reload MYSERVICE
Failed to reload MYSERVICE.service: Job type reload is not applicable for unit MYSERVICE.service.
Run Code Online (Sandbox Code Playgroud)

尝试 2:告诉它如何终止进程。这会杀死进程,但 systemd 不会为我重新启动它。

[Service]
ExecStart=/usr/bin/MYSERVICE
Type=simple
ExecReload=/bin/kill -HUP $MAINPID
Run Code Online (Sandbox Code Playgroud)

...其次是...

# systemctl daemon-reload
# systemctl reload MYSERVICE
Run Code Online (Sandbox Code Playgroud)

...杀死进程,但它不会自动重新启动。

尝试 3:也使用 ExecReload 重新启动进程。这失败有几个原因:

ExecReload=/bin/kill -HUP $MAINPID ; /usr/bin/MYSERVICE
Run Code Online (Sandbox Code Playgroud)

...我收到的错误消息...:

# systemctl daemon-reload
# systemctl reload MYSERVICE
Job for MYSERVICE.service failed because the …
Run Code Online (Sandbox Code Playgroud)

systemd

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

重新启动或“systemctl daemon-reload”以更改/etc/systemd/system.conf?

在 CentOS-7 中,systemd 的 /etc/systemd/system.conf 中的选项更改需要重新启动还是“systemctl daemon-reload”就足够了?

systemd

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

Systemd 环境和 EnvironmentFile 不起作用

我已经为它构建了一个应用程序和一个 systemd 单元。systemd 单元工作正常,但随着开发和生产环境的不同,我开始将配置移到环境变量中,但似乎无法让它们在 systemd 中工作。

我已经尝试过系统范围的环境变量,它们对操作系统可见,但对程序不可见,所以我开始考虑将它们构建到 systemd 单元中。

首先我尝试使用 EnvironmentFile

我创建了一个简单的环境文件

LCSQLH=localhost
LCSQLU=application
Run Code Online (Sandbox Code Playgroud)

在它作为/etc/lc.sh

[Unit]
Description=Service for this app

[Service]
EnvironmentFile=/etc/lc.sh
ExecStart=/usr/bin/env python /opt/app/__init__.py
Run Code Online (Sandbox Code Playgroud)

做了systemctl --system daemon-reload但没有,我的应用程序出错:

Jan 27 14:24:59 machine.host env[630]: KeyError: 'LCSQLU'

我看到一些有:

EnvironmentFile=-/etc/lc.sh

我试过了……不……

所以我试着把它们单独放进去

[Service]
Environment="LCSQLH=localhost"
Environment="LCSQLU=application"
ExecStart=/usr/bin/env python /opt/app/__init__.py
Run Code Online (Sandbox Code Playgroud)

再一次,没有...

所以我听说了这样的想法,/etc/systemd/service_name.service.d所以我在那里放了一个 service.conf 和环境(与上面的格式相同)但没有......

我的应用程序无法访问这些环境变量。

如果我导出它们(在我的 shell 中手动或使用 /etc/profile.d/)并直接运行我的应用程序,它就可以工作,所以这些不是被设置而不是应用程序问题。

这是 Centos 7.3,我选择了环境变量而不是硬编码的配置,因为它可以在 linux 或 windows 上运行,所以不想将配置文件埋在 /etc/ 中

systemd centos7

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

如何绕过systemd“启动请求重复太快”

我在 CentOS7 虚拟机中玩弄 CHEF,脚本由于问题而失败:

systemd[1]: start request repeated too quickly for fail2ban.service
Run Code Online (Sandbox Code Playgroud)

我知道这在 systemd 中是可配置的,但我只想知道,出于测试目的,是否有办法“重置”systemd,这样我就可以执行start fail2ban service而不会永远收到此错误。现在我必须重新启动操作系统,以便我能够执行它。

谢谢

redhat centos systemd

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

使用 Linux/Systemd 增加启动时的磁盘检测超时

我有一台有很多磁盘的机器,还有一个 HBA 模式下的额外 SAS 控制器。这似乎导致 Linux 在磁盘实际出现之前在 initramfs 中思考至少 8-10 秒。磁盘检测超时时间为 10 秒。这会导致 BTRFS/MDADM/etc 无法挂载我系统中的 RAID1,将我置于紧急 shell 中,从那里我可以实际挂载磁盘并继续正常工作。

我的问题是,如何从 10 秒增加启动时的超时时间?它在systemd中吗?是在udev吗?别的地方?我不确定从哪里开始寻找,谷歌搜索这个问题似乎主要是让人们希望提高 I/O 超时或其他一些(scsi/lun/etc)超时,但我不是在寻找那个。

linux timeout boot btrfs systemd

11
推荐指数
1
解决办法
2038
查看次数