是否有可能指定多个单位的任何一个系统的依赖关系? 目前,我有一个单元Z,它依赖于单元A或单元B中的至less一个。 configuration要WantedBy单位A通过单位Z和单位B WantedBy单位Z主要工作。 但是,如果单元A或B中只有一个能够启动,则引导过程会在启动单元Z之前等待另一个单元超时。我想消除此超时。 单元A和B需要超时才能正常工作,但是一旦一个单元启动,在启动单元Z之前不需要等待另一个单元超时。 有没有办法指定单元Z取决于单元A还是单元B,但在启动单元Z之前不需要等待单元A和单元B? 在Debian世界中,包装系统使用Provides来指定类似于我希望在这里完成的东西。 我正在努力完成的 Debian用于支持crypttab的keyscript选项,但是在上游重写了systemd的启动脚本时没有重新实现该选项。 以前,我用一个键盘从USB驱动器读取我的密钥。 目前,我正在使用systemd单元文件来代替keyscript选项(单元A)。 这是完美的。 但是,USB驱动器容易出现故障,所以为了冗余,我想在第二个USB驱动器上携带我的密钥的第二个副本。 我想为第二个USB驱动器(单元B)添加第二个systemd单元文件,以便无论插入哪个USB驱动器, systemd都可以使用该USB驱动器,并且不会超时。 我试过的其他事情 使用Conflicts指定A与B冲突,B与A冲突。不幸的是,systemd在尝试启动单元A或B之前处理冲突,并在尝试启动剩余单元之前从调度程序中删除其中一个单元。 所以Z有时会失败,例如,如果A失败了,但是B会成功,如果B由于与A的冲突而已经被淘汰了。 使用JobTimeoutSec来缩短超时。 不幸的是,如果A和B超时,这可能导致Z失败。 迈克尔汉普顿的build议。 正如他所提到的那样,NTP示例创build了每个客户和目标之间的弱依赖关系。 每个NTP客户端都需要目标,但目标不依赖于每个NTP客户端,所以这是有效的。 然而,正如我所知道的那样,弱依赖不会拉入单元,除非单元还有一个指定附加依赖的[Install]部分。 所以,当我拉我的单位A和B, WantedBy在[Install]部分创build阻塞超时。 如果我删除了[Install]部分,则单元A和B将被忽略。
systemd在/system.slice/process-name.service cgroup中启动一个进程。 我想在不同的cgroup中启动这个过程。 我可以在ExecStart选项中使用cgexec来做到这一点,但有没有更好的办法?
我的服务器显示多个丢失的服务 我怎样才能从Systemd中删除它们? 他们没有被发现。 systemctl -a显示:多个未find systemctl reset-failed显示:仍然显示 这些(它们都不在/ etc / systemd /或/ lib / systemd中): exim4.service – 我使用后缀,我从来没有安装 apache2.service – 我使用nginx 谢谢!
我尝试写一个自定义的服务文件。 不幸的是我在journalctl中看不到输出。 这是我的单位档案: root@om:~# cat /etc/systemd/system/ssh-tunnel-foo-de.service [Unit] Description=Tunnel For ssh-tunnel-foo-de After=network.target [Service] User=autossh ExecStart=/usr/bin/ssh -o "ExitOnForwardFailure yes" -o "ServerAliveInterval 60" -N -R 1080:localhost:1080 [email protected] ExecStartPre=-/usr/bin/ssh [email protected] "for pid in $$(ps -u tunnel | grep sshd| cut -d' ' -f1); do kill -9 $$pid; echo kill old ssh process $$pid; done" Restart=always RestartSec=5s StartLimitInterval=0 [Install] WantedBy=multi-user.target […]
有没有办法知道当前运行的configuration是否过时? 有没有办法查看当前正在运行的configuration并将其与文件进行比较? 在运行重装之前,知道运行configuration是什么是非常有用的。 如果该命令会告诉我它是否实际更新了configuration,这也很有价值。
当我从systemd启动Net-SNMP时,没有错误消息,但守护进程不运行: % sudo systemctl start snmpd % 当我从命令行启动它时,它运行: % sudo /usr/sbin/snmpd 并回答SNMP查询。 如果我添加debugging标志(-LSdd),我看到由systemd启动的守护进程在以下情况之后立即被终止: Apr 7 15:37:50 localhost snmpd[1298]: NET-SNMP version 5.7.2 Apr 7 15:37:50 localhost snmpd[1298]: Received TERM or STOP signal… shutting down… 服务文件是Arch Linux软件包的默认文件: [Unit] Description=Simple Network Management Protocol (SNMP) Daemon After=syslog.target network.target [Service] Type=forking ExecStart=/usr/sbin/snmpd ExecReload=/bin/kill -HUP $MAINPID [Install] WantedBy=multi-user.target 如果我在服务文件中添加RemainAfterExit = yes,snmpd可以正常工作,但机器不能正常启动(例如,没有DHCP客户机) […]
我的web服务器运行ubuntu 14.10与elasticsearch 1.5.0和java 1.7u55 由于某种原因,elasticsearch服务经常停止,导致我的网站不再提供给我的用户(使用带有symfony的FOSElasticaBundle)。 我正在使用systemctl自动重新启动,但我宁愿一劳永逸一个很好的修复。 我觉得我所拥有的logging不够具有描述性。 对于pipe理服务器来说很新,我需要一些帮助。 有人能帮我弄清楚这个失败的原因吗? 我可以在这里输出什么正确的文件来更好地理解这个问题? 谢谢 ! 我的systemctl状态给出: elasticsearch.service – ElasticSearch Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled) Active: active (running) since Mon 2015-04-20 12:04:24 CEST; 1h 56min ago <————- Here it means restarted 1h56 ago. Why did it fail in the first place ? Main PID: 9120 (java) CGroup: /system.slice/elasticsearch.service └─9120 /usr/bin/java […]
我使用的是Ubuntu 16.04服务器,已经创build了一个基本的nodejs脚本,并将其打包在一个简单的systemd服务中。 /lib/systemd/system/api.service上的/lib/systemd/system/api.service内容: [Unit] Description=api After=network.target [Service] WorkingDirectory=/var/node/api ExecStart=/usr/bin/node index.js Restart=always RestartSec=5s StartLimitInterval=60s StartLimitBurst=5 [Install] WantedBy=multi-user.target 当我用journalctl -u api.service -n -f看日志时,看起来我的一些脚本输出行没有被logging,特别是当脚本在很短的时间内产生大量的日志行时。 例如,如果nodejs脚本只是输出前3000个整数的一个简单的for循环,那么只有大约2500行似乎被logging在日志中。 /var/node/api/index.js处的index.js的内容: for (var i = 1; i <= 3000; i++) { console.log(i); } console.log("end of script"); 当用journalctl -u api.service -n -f查看日志时,我只能得到大约2500行: May 04 13:52:15 test systemd[1]: Stopping api… May 04 13:52:15 test systemd[1]: […]
相关: 使subprocess的整体内存使用率 有没有一种方式让非特权用户或root用户允许非特权用户创build一个systemd作用域(或由systemdpipe理的其他控制组),以便该作用域的内存使用量是有限的,并且该限制可由用户? 或者,为什么这不能达到上述效果: $ 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 […]
我已经创build了两个服务,一个用于rails应用程序,另一个用于其delayed_job进程,我想重新启动delayed_job服务,每次rails服务重新启动,我可以用systemd来做这个吗?