标签: systemd-service

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

显示一个 systemd 单元文件及其合并的覆盖

systemctl cat myunit.service打印主文件的内容myunit.service,然后打印任何覆盖文件。有没有一种方法可以打印 systemd 实际使用的单元文件,即通过将覆盖合并到主单元中而形成的文件?

systemd systemd-service

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

如果另一个 systemd 服务正在运行,则阻止 systemd 服务启动

在 systemd(UbuntuLinux 18.04 bionic 上的 v237)中,我可以创建一个服务文件(用于A.service),并指定另一个服务Requisite=B.service。这意味着如果我尝试启动A.serviceB.service尚未运行,则 A.service 将不会启动。这是 的弱版本,当我尝试启动时Requires它将启动。B.serviceA.service

\n\n

有相反的吗?我可以说\xe2\x80\x9c如果B.service正在运行,那么就不要启动这个服务\xe2\x80\x9d / \xe2\x80\x9c如果B.service正在运行,那么A.service无法启动\xe2\ x80\x9d?

\n\n

文档说如果我这样做Conflicts=B.service,那么启动A将停止 B 然后启动 A。但我不希望 B 停止,我只是希望 A 无法启动。我想要的东西就是Conflicts这样RequisiteRequires

\n\n

我可能可以将 更改ExecStart为会失败的 shell 命令systemctl is-active B.service或某种 hack。有没有合适的解决办法呢?

\n

job-control systemd systemd-service

5
推荐指数
2
解决办法
9709
查看次数

建立网络链接后如何运行 systemd 服务?

不久前,我根据文档设置了一个 systemd 服务,以便在网络上线后运行。\n这是单元文件:

\n
[Unit]\nDescription=Refresh Pacman mirrorlist with Reflector.\nDocumentation=https://wiki.archlinux.org/index.php/Reflector\nWants=network-online.target\nAfter=network-online.target nss-lookup.target\n\n[Service]\nType=oneshot\nExecStart=/usr/bin/reflector @/etc/xdg/reflector/reflector.conf\nCacheDirectory=reflector\nCapabilityBoundingSet=~CAP_SETUID CAP_SETGID CAP_SETPCAP CAP_SYS_ADMIN CAP_SYS_PTRACE CAP_CHOWN CAP_FSETID CAP_SETFCAP CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER CAP_IPC_OWNER CAP_NET_ADMIN CAP_SYS_TIME CAP_AUDIT_CONTROL CAP_AUDIT_READ CAP_AUDIT_WRITE CAP_KILL CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW CAP_SYS_NICE CAP_SYS_RESOURCE CAP_MAC_ADMIN CAP_MAC_OVERRIDE CAP_SYS_BOOT CAP_LINUX_IMMUTABLE CAP_IPC_LOCK CAP_SYS_CHROOT CAP_BLOCK_SUSPEND CAP_LEASE CAP_SYS_PACCT CAP_SYS_TTY_CONFIG CAP_WAKE_ALARM\nEnvironment=XDG_CACHE_HOME=/var/cache/reflector\nLockPersonality=true\nMemoryDenyWriteExecute=true\nNoNewPrivileges=true\nPrivateDevices=true\nPrivateTmp=true\nPrivateUsers=true\nProtectClock=true\nProtectControlGroups=true\nProtectHome=true\nProtectHostname=true\nProtectKernelTunables=true\nProtectKernelLogs=true\nProtectKernelModules=true\nProtectSystem=strict\nReadOnlyPaths=/etc/xdg/reflector/reflector.conf\nReadWritePaths=/etc/pacman.d/mirrorlist\nRemoveIPC=true\nRestrictAddressFamilies=~AF_AX25 AF_IPX AF_APPLETALK AF_X25 AF_DECnet AF_KEY AF_NETLINK AF_PACKET AF_RDS AF_PPPOX AF_LLC AF_IB AF_MPLS AF_CAN AF_TIPC AF_BLUETOOTH AF_ALG AF_VSOCK AF_KCM AF_UNIX AF_XDP\nRestrictNamespaces=true\nRestrictRealtime=true\nRestrictSUIDSGID=true\nSystemCallArchitectures=native\nSystemCallFilter=@system-service\nSystemCallFilter=~@resources @privileged\nUMask=177\n\n[Install]\nWantedBy=multi-user.target\n
Run Code Online (Sandbox Code Playgroud)\n

根据文档,该服务应该已正确设置以等待建立网络连接(即:我已登录,NetworkManager 已连接到 WiFi 并且系统已分配了 IP)。

\n
\n

network-online.target是一个主动等待网络“up”的目标,其中“up”的定义由网络管理软件定义。通常它表示某种已配置的、可路由的 IP …

linux systemd systemd-service

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

如何按内存使用情况列出 systemd 服务

我想看看哪些systemd服务消耗最多的内存。

有没有办法按内存使用情况列出所有正在运行(和/或启用)的 systemd 服务?

systemd systemd-service

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

Systemd 计时器 OnCalendar 每分钟以 5 结尾

使用OnCalendarsystemd 计时器,我可以创建类似这样的东西,每 5 分钟运行一次。

OnCalendar=*:0/5
Run Code Online (Sandbox Code Playgroud)

是否可以仅在 5 点(00:05、00:15、00:25...)结束的每分钟运行它?

和/或仅在每分钟以 0 结尾(00:00、00:10、00:20...)?

主要目标是在两台服务器上有一个计时器,以便每台服务器在空闲时间运行;万一其中一个失败,另一个将至少每 10 分钟(而不是 5 分钟)运行一次。

cron systemd-service

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

如何找到 systemd 服务无法启动的确切原因(服务的单元文件设置错误)?

这真的很烦人,systemd只回应我的服务文件配置错误,但没有具体指出错误在哪里:

\n

/lib/systemd/system/auto_pgha.service:

\n
[Unit]\nDescription=PostgreSQL High Availability\nAfter=network.service\nAfter=firewalld.service\n\n\n[Service]\nType=simple\nWorkingDirectory=/etc/repmgr\nExecStartPre=/bin/bash -c 'echo -e "\\n"  `date +"%Y/%m/%d %a, %X"`": STARTING \\n"  >> pgha.log'\nExecStart=/bin/bash -c "python3 pg_high_availability.py  &>> pgha.log"\nRestart=always\nRestartSec=3\n\n[Install]\nWantedBy=multi-user.target\n
Run Code Online (Sandbox Code Playgroud)\n

在目录内/etc/repmgr这两个命令运行得很好。但 systemd 服务只是响应了一个错误:

\n
# systemctl start auto_pgha\nFailed to start auto_pgha.service: Unit auto_pgha.service has a bad unit file setting.\nSee system logs and 'systemctl status auto_pgha.service' for details.\n\n# systemctl status -l auto_pgha\n\xe2\x97\x8b auto_pgha.service - PostgreSQL High Availability\n     Loaded: bad-setting (Reason: Unit auto_pgha.service has a bad unit file setting.)\n......\nauto_pgha.service: Unit configuration has …
Run Code Online (Sandbox Code Playgroud)

systemd systemd-service

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