标签: systemd

使用 cgroups 作为用户设置用户创建的 systemd 作用域的 MemoryLimit

相关:限制子进程的总体内存使用量

有没有办法让非特权用户或 root 允许非特权用户创建一个 systemd 作用域(或由 systemd 管理的其他控制组),以便限制该作用域的内存使用量,并且该限制可以由用户?

或者说,为什么这样达不到上面描述的效果:

$ systemd-run --scope --user --unit=limit-test.scope bash
Running as unit limit-test.scope.
$ systemctl show --user limit-test.scope |grep Mem
MemoryAccounting=no
MemoryLimit=18446744073709551615
$ systemctl set-property --user limit-test.scope MemoryAccounting=yes
$ systemctl set-property --user limit-test.scope MemoryLimit=100M
$ systemctl show --user limit-test.scope |grep Mem
MemoryAccounting=yes
MemoryLimit=104857600
$ python
>>> a = [1]*1000000000    # happily eats 7.4G of RAM
Run Code Online (Sandbox Code Playgroud)

我正在使用 systemd 215 的 Debian stable 上进行测试。内核是 3.18.2 并使用所需的支持进行编译,我相信:

$ zgrep -E 'CGROUP|MEMCG' /proc/config.gz 
CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is …
Run Code Online (Sandbox Code Playgroud)

linux debian memory-usage cgroup systemd

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

使用 systemd 重新启动 Postfix 而不断开连接

在 CentOS7 上,使用 systemd 或其他方式,有没有比以下更好的方法来重新启动 postfix:

sudo systemctl restart postfix
Run Code Online (Sandbox Code Playgroud)

上述操作不会破坏任何正在发生的活动邮件连接吗?我正在寻找类似 Apache 的优雅重启之类的东西,并想知道它是否可能,或者是否有必要。

postfix systemd centos7

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

使用 UTC 时间时,systemd 计时器无法启动(参数无效)

这是我的计时器:

[Unit]
Description=Do whatever

[Timer]
OnCalendar=daily UTC

[Install]
WantedBy=timers.target
Run Code Online (Sandbox Code Playgroud)

它无法启动并出现以下错误:

Failed to start mytimer.timer: Unit mytimer.timer failed to load: Invalid argument. See system logs and 'systemctl status mytimer.timer' for details.
Run Code Online (Sandbox Code Playgroud)

遗憾的是,systemctl status错误消息没有任何清晰度

但是,如果我删除 UTC 文字,它就可以正常工作:

[Unit]
Description=Do whatever

[Timer]
OnCalendar=daily

[Install]
WantedBy=timers.target
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

该文档描述了 接受的格式OnCalendar,并且表明可以使用UTC。

是的,我尝试使用引号 - 没有帮助。我也尝试使用标准化形式 - 同样的事情

版本:

  • 操作系统:CentOS 7
  • 内核:3.10.0-042stab113.21
  • 系统:systemd-219-19.el7_2.9.x86_64

linux systemd

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

显示所有已启用但未运行的 systemd 服务

如何显示所有已启用但未运行的 systemd 服务?

AFAIK“未运行”可能在两种情况下发生:

  1. 服务崩溃了
  2. 服务已停止。

在我目前的情况下,服务是否崩溃或被明确停止并不重要。

systemd

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

systemctl 的可解析输出(例如列出所有单元)

我对 systemctl 的输出不满意

我有一个解析输出的脚本

systemctl list-units -t service --full --all
Run Code Online (Sandbox Code Playgroud)

输出的开头如下所示:

  UNIT                                   LOAD      ACTIVE     SUB          JOB   DESCRIPTION                                                                  
  after-local.service                    loaded    inactive   dead               /etc/init.d/after.local Compatibility                                        
? amavis.service                         not-found inactive   dead               amavis.service                                                               
  apparmor.service                       loaded    active     exited             Load AppArmor profiles                                                       
  auditd.service                         loaded    active     running            Security Auditing Service                                   
Run Code Online (Sandbox Code Playgroud)

在不同的系统上,带点的列(在 amavis.service 之前)不存在。

systemctl 是否有机器/脚本可读的输出?

systemd systemctl

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

带有自定义数据目录的 Redis:systemd 配置文件自动更改?

我在 Ubuntu 18.04.1 LTS 上运行 Redis 4.0.9,并带有 RBD 文件的自定义数据目录。

为了完成这项工作,除了将dirin更新redis.conf到新位置之外,我还必须更新/etc/systemd/system/redis.service和设置:

ReadWriteDirectories=-/my/custom/data/dir

(如此处所述:https : //stackoverflow.com/questions/44814351/failed-opening-the-rdb-file-read-only-file-system

一切正常,直到突然有一天 RedisFailed opening the RDB file backup.rdb (in server root dir /var/lib/redis) for saving: Read-only file system再次开始给出错误,好像ReadWriteDirectories没有设置为新的数据目录。

我检查了/etc/systemd/system/redis.serviceReadWriteDirectories我添加的条目确实消失了。我重新添加了它,重新启动后,Redis 再次正常工作并且可以保存数据。

我的问题是:怎么可能/etc/systemd/system/redis.service改变而我的ReadWriteDirectories线消失了?我是唯一可以使用这台机器的人。在某些情况下,此文件会自动覆盖吗?我可以禁用它吗?

ubuntu redis systemd

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

systemd 启动服务即使需要的服务也不会启动

我有一个正在测试的测试 systemd 服务。我有 test.service 看起来像这样

[Unit]
Description=Dovid Demo Service
After=mariadb.service
Requires=mariadb.service

[Service]
ExecStart=/home/dovid/test.sh
User=dovid
Group=dovid

[Install]
WantedBy=default.target
Run Code Online (Sandbox Code Playgroud)

如果我做

systemctl start test
Run Code Online (Sandbox Code Playgroud)

它将首先启动 MariaDB,然后启动我的脚本。但是,如果我屏蔽了 MariaDB(我做了 systemctl mask mariadb),那么 MariaDB 将无法启动,systemd 将启动 test.sh。它不应该因为启动一个必需的进程而失败,在这种情况下是 MariaDB?

linux systemd

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

为什么需要“systemd-resolved”?

我正在将生产服务器从 Ubuntu 14.04 升级到 18.04,并注意到systemd-resolved18.04 中有一个名为运行某种本地 DNS 缓存的东西。[1]

为什么需要这样做?nameserver 1.1.1.1简单地放入或nameserver 8.8.8.8放入/etc/resolv.conf然后就到此为止有什么问题吗?systemd-resolved禁用并恢复到更简单的配置是否安全?

[1] 我注意到只是因为它随机崩溃并导致所有主机名查找失败,从而有效地削弱了我的应用程序 - https://askubuntu.com/questions/1117842/systemd-resolved-crashing-with-failed-to-set-上挂载命名空间无效参数

systemd

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

如何找出哪些 systemd 服务/单元是目标单元的一部分?

所以如果我运行,systemctl list-units --type=target我可以看到我机器上的所有目标单元。

但是,如果我想找到每个这些“伞形”目标单位下的服务和其他单位的列表,我该怎么做?

换句话说,如果我看到journalctl我有一个UNITxyz,我怎么知道那个单位属于哪个目标?

我在日志消息中看到“达到目标<target_name>”,但我很好奇导致达到该目标的日志消息和单位。

谢谢!

linux systemd

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

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

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

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

systemd systemd-service

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