我正在使用 systemd 在 Ubuntu 18.04 LTS 服务器上运行 Celery,这是一个 python 分布式任务调度程序。
我必须安排大部分长时间运行的任务(需要几分钟才能执行),根据数据,这些任务最终可能会消耗大量 RAM。我想采取某种安全措施来控制内存使用。
我在这里读到,您可以使用MemoryHigh和MemoryMax选项控制 systemd 服务使用的 RAM 量
我在我的 Celery 服务设置中使用了这些选项,并且我观察了当 celery 服务达到给定限制时会发生什么情况htop。
该服务停止执行并置于“D”状态,但保持该状态并且分配的内存未释放。
systemd 是否有可能终止占用内存的进程?
更新
正如下面的评论中所建议的,我已经尝试了一些诊断,并且我将添加其他问题详细信息。
Linux 服务器运行在 Virtual Box 托管的开发虚拟机上,仅运行资源消耗任务。
该MemoryMax设置设为百分比 (35%)。
下图中可以看到htop中的进程状态
正如这个问题的答案中所建议的,以下是挂起的进程堆栈的内容。
[<0>] __lock_page_or_retry+0x19b/0x2e0
[<0>] do_swap_page+0x5b4/0x960
[<0>] __handle_mm_fault+0x7a3/0x1290
[<0>] handle_mm_fault+0xb1/0x210
[<0>] __do_page_fault+0x281/0x4b0
[<0>] do_page_fault+0x2e/0xe0
[<0>] page_fault+0x45/0x50
[<0>] 0xffffffffffffffff
Run Code Online (Sandbox Code Playgroud) 我正在摆弄一些超时设置,并试图找出为 systemd/系统守护进程设置内容的正确方法。具体来说,这是一个动力不足的服务器,并且我在启动 clamd 时总是超时,因此我试图弄清楚需要将 TimeoutStartSec 参数设置为多高。我试过
systemctl edit --full clamd@.service
并编辑它说
TimeoutStartSec=20min
然后做了systemctl daemon-reload
但7分钟后它就神秘地超时了。最终,我发现/usr/lib/systemd/system/clamd@.service有TimeoutStartSec=420。
可能违背了所有正确的做法,我编辑了/usr/lib文件的版本,并注释掉了该行。果然,这改变了事情,但它似乎仍然没有读取版本/etc/systemd。一旦我将其注释掉,它就会在 90 秒后开始超时,我想这一定是默认值。
作为临时解决方法,我已将/usr/lib版本编辑为我想要的 20 分钟,但是......这似乎不是正确的做事方式。
应该systemctl edit编辑版本吗/etc/systemd/system?这是公认的正确做事方式吗?我还需要做更多的事情吗systemctl daemon-reload?
对有关正确方法的任何和所有建议持开放态度。
TIA
我有一个非 root 用户,我想授予他们 sudo 权限来启动和停止(等)systemd 服务文件,而无需密码。
\n我尝试在/etc/sudoers.d/servicename (其中[username]和[servicename]是实际名称)中创建以下文件:
[username] ALL=(root) NOPASSWORD: systemctl start [servicename]\n[username] ALL=(root) NOPASSWORD: systemctl stop [servicename]\n[username] ALL=(root) NOPASSWORD: systemctl restart [servicename]\nRun Code Online (Sandbox Code Playgroud)\n(对许多系统命令重复,例如reload// try-restart/ enable\xe2\x80\xa6)
但visudo告诉我这是一个语法错误。我该如何解决这个问题?
我想放入脚本(正在以非 root 用户身份运行)sudo systemctl stop [servicename]。
Ubuntu Linux 18.04,来自 ubuntu 的 systemd(这是 v245)。我也希望它能在 Ubuntu 20.04 上运行。
\n所以,我已经研究这个 systemd“可预测的网络接口名称”相当长一段时间了,并对它的工作原理有了一些了解,但出于对雷神的热爱,我无法弄清楚enp X s Y的命名方案,我知道它应该指示设备的物理位置,但是X和Y到底意味着什么?物理位置是哪一个?另一个到底表示什么,也许是总线索引?我不知道而且真的很想知道。我到处搜索,却找不到任何详细解释这个命名方案如何工作的内容。
我想限制我的服务可以重新启动的次数。有突发限制
StartLimitIntervalSec=60
StartLimitBurst=5
Run Code Online (Sandbox Code Playgroud)
但它们限制了服务在指定时间间隔内可以重新启动的次数。有没有办法指定一个服务一般可以重启多少次?就好像间隔被设置为无穷大一样。
systemd 245 (245.4-4ubuntu3.2)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 systemd 来构建 Apache、PHP-FPM 和 MariaDB 服务的关闭和启动:
这些是文件/etc/systemd/system夹中的其他配置文件:
# httpd.service
.include /usr/lib/systemd/system/httpd.service
[Unit]
After=mariadb.service php-fpm.service
Before=php-fpm.service
# php-fpm.service
.include /usr/lib/systemd/system/php-fpm.service
[Unit]
Before=mariadb.service
Run Code Online (Sandbox Code Playgroud)
我的意图是仅在 PHP-FPM 和 MariaDB 启动后才启动 Apache,并在停止 PHP-FPM 之前停止 Apache,在 MariaDB 之前停止 PHP-FPM。
但是,我在启动和关闭时都遇到错误:
12:42:09 systemd[1]: Found ordering cycle on php-fpm.service/stop
12:42:09 systemd[1]: Found dependency on mariadb.service/stop
12:42:09 systemd[1]: Found dependency on php-fpm.service/stop
12:42:09 systemd[1]: Job httpd.service/stop deleted to break ordering cycle starting with php-fpm.service/stop
12:42:09 systemd[1]: Stopping MariaDB database server...
12:42:12 systemd[1]: Stopped MariaDB database server. …Run Code Online (Sandbox Code Playgroud) 如何收集 systemd 日志事件(拉)或转发 systemd 日志事件(推送)?
我想要类似转发的事件日志(http://windows.tips.net/T012878_What_is_the_Purpose_of_the_Forwarded_Events_Event_Log.html)但在 Linux 下。
我正在使用 ArchLinux,但不确定这是否重要。
我应该将日志转发到系统日志然后收集系统日志吗?这样做会丢失任何信息吗?我可以在没有 syslog 守护程序的情况下收集日志消息吗?
在基于 Debian Jessie 创建新的 LXC 之后,在 Ubuntu 14.04 上,systemd-journal 会吃掉所有可用的 CPU。
lxc-create -n jessie -t debian
Run Code Online (Sandbox Code Playgroud) 我已经在安装了 Upstart 的 Jessie 服务器上进行了一些测试,并将其替换为 SysV,反之亦然。
在此之后,我无法再重新启动。
root@amoo-001:~# reboot
Failed to talk to init daemon.
root@amoo-001:~# systemctl reboot
Failed to get D-Bus connection: Unknown error -1
Run Code Online (Sandbox Code Playgroud) 谷歌搜索解决方案,我只找到了一些文章告诉我如何在旧系统中而不是在 systemd 维护的 Linux 下,通过更改 cron init-script 向命令行添加 -L 参数。
我有一个每分钟运行一次的 cron 作业。它为运行 cron 的用户打开和关闭的每个会话记录每次启动和额外的 pam_unix 条目。这是日志日志中的大量胡言乱语。如何在 systemd 环境中设置日志级别,以便我只记录错误和死亡人数?