有没有办法让非特权用户或 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) 在 CentOS7 上,使用 systemd 或其他方式,有没有比以下更好的方法来重新启动 postfix:
sudo systemctl restart postfix
Run Code Online (Sandbox Code Playgroud)
上述操作不会破坏任何正在发生的活动邮件连接吗?我正在寻找类似 Apache 的优雅重启之类的东西,并想知道它是否可能,或者是否有必要。
这是我的计时器:
[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。
是的,我尝试使用引号 - 没有帮助。我也尝试使用标准化形式 - 同样的事情
版本:
如何显示所有已启用但未运行的 systemd 服务?
AFAIK“未运行”可能在两种情况下发生:
在我目前的情况下,服务是否崩溃或被明确停止并不重要。
我对 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 是否有机器/脚本可读的输出?
我在 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.service,ReadWriteDirectories我添加的条目确实消失了。我重新添加了它,重新启动后,Redis 再次正常工作并且可以保存数据。
我的问题是:怎么可能/etc/systemd/system/redis.service改变而我的ReadWriteDirectories线消失了?我是唯一可以使用这台机器的人。在某些情况下,此文件会自动覆盖吗?我可以禁用它吗?
我有一个正在测试的测试 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?
我正在将生产服务器从 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-上挂载命名空间无效参数
所以如果我运行,systemctl list-units --type=target我可以看到我机器上的所有目标单元。
但是,如果我想找到每个这些“伞形”目标单位下的服务和其他单位的列表,我该怎么做?
换句话说,如果我看到journalctl我有一个UNITxyz,我怎么知道那个单位属于哪个目标?
我在日志消息中看到“达到目标<target_name>”,但我很好奇导致达到该目标的日志消息和单位。
谢谢!
我想看看哪些systemd服务消耗最多的内存。
有没有办法按内存使用情况列出所有正在运行(和/或启用)的 systemd 服务?