Articles of 系统

在systemd单元文件中closures缓冲?

当我编写我的单元文件时,我希望将所有来自Exec* -options( ExecStartPre=, ExecStartPost=, ExecStart=, and ExecStopPost= )的输出发送到日志。 但显然输出是以某种方式缓冲的,所以决不会写到日志里。 在我的单元文件( ulftest.service )中,我有以下部分: … ExecStartPre=/bin/echo 'Hello' ExecStartPre=/usr/bin/who ExecStart=/storage/_test/venv/bin/python /storage/_test/ulftestservice.py … 所以我希望有一个login用户列表(我4)和在正常的开始,开始,停止和停止的行之外的杂志上出现一个你好 。 情况并非如此。 如果他们出现或不出现,这是完全(至less对我来说)随机的。 我写了一个小testing程序,每2秒重新启动一次服务: $ for x in `seq 100`; do echo $x; sudo systemctl restart ulftest.service ; sleep 2; done 运行后,我在日记中得到这个: … 2017-05-10T09:40:36+0000 ulf44 systemd[1]: Started UlfTest, Administrative interface. 2017-05-10T09:40:38+0000 ulf44 systemd[1]: Stopping UlfTest, […]

在电源键上跳跃和hibernate

我有一台笔记本电脑,我运行Arch Linux。 我的笔记本电脑有一个旋转的硬盘,而不是一个固态硬盘,所以我讨厌交换。 但是,我需要一个hibernate,并且每次按下电源键或电池电量不足时,我都希望笔记本电脑进入hibernate状态。 我现在的想法是在systemd-hibernate.service启动之前有swapon 。 (当然,觉醒后也可以swapoff 。) 为此,我做了一个dev-sda7.swap单元。 其操作简单明了: [Unit] Description=Hibernate swapon DefaultDependencies=false TimeoutStopSec=infinity [Swap] What=/dev/sda7 我希望将它绑定到sleep.target , hibernate.target或systemd-hibernate.service以便在hibernate之前启动它,并在刚刚停止之后停止。 但事情并没有那么顺利。 现在我有dev-sda7.swap停止,如果我添加PartOf=sleep.target &我已经开始之前systemd-hibernate.service如果我添加WantedBy=systemd-hibernate.service & Before=systemd-hibernate.service 。 这听起来像是成功,但事实并非如此。 logind.conf指定HandlePowerKey=hibernate ,据我所知,它调用systemctl hibernate 。 (也许这是更复杂的,我不知道) systemctl hibernate但是不会发出start systemd-hibernate.service除非集成的交换检查传递,这是不会发生,直到start systemd-hibernate.service发出。 我希望你能看到这里的复杂。 我想使用systemd的逻辑来启动我的交换。 所以我收集我必须以某种方式从logind删除交换检查。 否则,也许有一种方法可以在检查之前运行一个脚本 – 一个脚本,可以swapon 。 一个专门的/etc/udev/rules.d/99-lowbat.rules指定一个任意的命令来运行时,电源运行低,这可以systemctl start systemd-hibernate.service 。 我想知道是否有一个udev规则,当按下电源键时运行一个命令。 然后我可以完全没有logind。 你能告诉我什么? 我们在Arch Linux论坛上进行了一些讨论 ,帮助build立了证据,但没有提供任何解决scheme。

在MySQL中存储系统用户时,Apache无法启动

我正在pipe理6台服务器,其中3台在重启后无法启动Apache。 这三个共同之处在于它们都依赖于MySQL / MariaDB来存储系统用户(通过libnss-mysql-bg )。 Apache也被设置为mpm-itk ,导致网站在自己的系统用户下运行。 这使我相信,Apache启动时无法启动的原因是它在vHost文件( AssignUserID )中看到对系统用户的引用,它目前还找不到,因为MySQL尚未完成启动。 除非有人能build议我一个更好的解决scheme,我如何确保Apache只在 MySQL运行之后才启动? Apache也似乎没有自己的systemd服务文件。 服务器都运行Ubuntu 16.04.2 LTS systemd。

在systemd服务中,除了$ MAINPID之外,如何在重新启动时终止所有进程?

我为systemd写了一个简单的.service 。 我的过程开始正常,但它跨越了不同的PID的更多子过程 。 因此,我无法用通常的方式来适当地阻止我的服务: ExecReload=/bin/kill -HUP $MAINPID 因为我杀死了主要的原始进程(一个shell脚本),而不是它的subprocess。 我怎么能杀死他们都重新启动? 有没有像$ ALLPIDS有效的macros? (我正在使用Ubuntu 16.04。) 谢谢,F

systemd singlehot服务器每隔x天运行一次

我希望每隔85天使用systemd来运行一个命令。 我已经创build了一个定时器和一个服务的命令,但我不能让计时器启动。 我希望能够每85分钟运行一次命令,而不是在启动时运行,即使在85天期间重新启动服务器也能运行。 /etc/systemd/system/my.service [Unit] description=Do my task [Service] Type=oneshot ExecStart=/usr/local/sbin/myTask /etc/systemd/system/my.timer [Unit] Description=Timer to do my task [Timer] OnUnitActiveSec=85d Unit=my.service Persistent=true 尝试启动它使用systemctl start my.timer ,我得到的错误消息是: my.timer: Refusing to start, unit to trigger not loaded. Failed to start Timer to do my task.

无法在ubuntu xenial上closuresisc-dhcp-server上的logging

我编辑了/etc/dhcp/dhcpd.conf并设置 log-facility local4; 我也编辑过/etc/systemd/system.conf并设置 LogLevel=notice 我已validation日志级别设置为通知该命令。 systemctl -pLogLevel show 这似乎没有任何影响isc-dhcp-server的日志logging。 它仍然logging每个DHCPACK和DHCPREQUEST和DHCPDISCOVER /var/log/syslog 进行这些更改后,我也重新启动了isc-dhcp-server服务,并运行命令让systemd再次读取其configuration。 service isc-dhcp-server restart systemctl daemon-reload 如何closuresUbuntu Xenial上的isc-dhcp-server日志logging?

CoreOS舰队单元文件和Dockerdynamic端口问题

我目前正试图获得一个dynamic的端口,所以我可以在CoreOS上注册与etcd。 这certificate非常困难。 这是我的单位文件 [Unit] Description=test Elastic Search Server After=docker.service Requires=docker.service [Service] User=core ExecStartPre=/usr/bin/docker pull shizzle/elasticsearch-server ExecStart=/bin/bash -c '/usr/bin/docker start -a %n || /usr/bin/docker run –name="%n" -p :9200 -p :9300 shizzle/elasticsearch-server /elasticsearch/bin/elasticsearch -Des.config=/etc/elasticsearch.yml' ExecStartPost=-/usr/bin/etcdctl mkdir /%n ExecStartPost=/usr/bin/etcdctl set /%n/host %H ExecStartPost=/bin/bash -c "/usr/bin/etcdctl set /%n/port $(docker inspect –format='{{(index (index .NetworkSettings.Ports "9200/tcp") 0).HostPort}}' %n)" ExecStop=/usr/bin/docker stop /%n […]

configurationsystemd以重新启动超时进程

我们有一个相当复杂的系统服务Type=notify 。 偶尔,服务将在启动/重新启动时挂起,并在systemd失败以接收sd_notify调用之后进入failed状态。 我们希望在这种情况下重新启动服务 – 很可能是第二次正确启动。 但是, systemd.service(5)手册页说: 当进程死亡是系统运行(例如服务停止或重启)的结果时,服务将不会重新启动。 有没有办法在系统configuration中克服这个限制? 否则,我们将不得不监视守护进程状态,并在每次卡住时手动重启它,或者为此开发某种监督脚本,这可能会在系统中引入更多的失败点。

组合本地和远程日志logging

我在两台机器上使用systemd-journal-remote (本地站点)和systemd-journal-upload (远程站点)使用systemd-219在centos7上进行日志转发。 本地日志存储在/var/log/journal/<machine_id>/*.journal而远程上载存储在/var/log/journal/remote/remote-*.journal 。 我可以使用journalctl -lf或journalctl -D /var/log/journal/remote -lf查看。 我现在试图使用journalctl -m来获得一个组合视图,其中man页面显示它将显示来自所有可用日志(包括远程日志)的条目,但是这似乎不起作用,至less不是我的方式期望,因为期刊不以任何方式合并。 使用SYSTEMD_LOG_LEVEL=debug journalctl -lfm提供关于包含的日志文件的提示: Root directory /var/log/journal added. Considering /var/log/journal/fb643c7c40aa414aab4fe052ee7aff57. Directory /var/log/journal/fb643c7c40aa414aab4fe052ee7aff57 added. File /var/log/journal/fb643c7c40aa414aab4fe052ee7aff57/system.journal added. File /var/log/journal/fb643c7c40aa414aab4fe052ee7aff57/user-1001.journal added. File /var/log/journal/fb643c7c40aa414aab4fe052ee7aff57/user-1000.journal added. Journal filter: none Considering /var/log/journal/fb643c7c40aa414aab4fe052ee7aff57. … journal output … 有没有办法实现所有日记的合并视图,我的意思是所有日记文件位于/var/log/journal/ ?下的某处

systemd中的软依赖

我想了解是否有办法在systemd服务之间创build一个软依赖关系。 基本上,我想创build一个“伞”服务,启动标记为(软)依赖关系的其他服务,但是当且仅当它们被启用时 – 伞不应该启动被禁用的相关服务。 更具体地说,我收到了cfengine-systemd的拉取请求 ,旨在创build这样一个伞形单位。 不幸的是,build议的cfengine3.service单元不遵守从属单元的启用/禁用状态,并在任何情况下启动它们。 我曾经试图用一个目标单位来做同样的事情,但是失败了 。 任何线索? 提前致谢 更新下面迈克尔的问题:我会说,如果cfengine3.service被禁用,systemd不应该尝试启动依赖服务。