Articles of systemd

systemd redis.service将不允许unix套接字连接?

我在Ubuntu 16.04上安装了redis-server,我试图通过unix socket连接到它。 我已经注释掉了redis.conf中的bind和port指令,并取消了unixsocket指令的注释,所以我有: # Accept connections on the specified port, default is 6379. # If port 0 is specified Redis will not listen on a TCP socket. # port 6379 # TCP listen() backlog. # # In high requests-per-second environments you need an high backlog in order # to avoid slow clients connections issues. […]

httpd:如何dynamic延迟请求转发到代理?

我有Apache httpd(2.2.22)configuration为反向代理。 在这种情况下,我需要将我的Web服务器(代理请求的接收者)离线几毫秒。 在此期间,Web服务器不应收到任何请求,但我也不想拒绝任何请求。 我想要做的是以某种方式让httpd延迟这段时间的所有请求。 在步骤中: 告诉httpd延迟所有的请求,直到另行通知 停止Web服务器 启动networking服务器 继续从httpd转发请求 一个固定的延迟也可以做到这一点,但由于我无法预见Web服务器将离线的实际时间(除此之外它将不到一秒),dynamic方法将更适合。 我已经看过mod_proxy或mod_balancer如何能够帮助我,但我没有find一个明显的解决scheme。 我会很高兴你可以给我的任何指针。 编辑: 看起来像一个静态的方法就足够了。 一些有用的资源: httpd ProxyPass httpd ProxyTimeout ProxyPass与mod_rewrite (无需明确使用ProxyPass;不需要使用ProxyPassInterpolateEnv) 另请参阅这篇文章 ,讨论关于httpd返回503立即(代理和平衡器)的讨论。 替代scheme: 我们将把systemd部署到我们的服务器上。 systemd将解决我的问题,因为它可以保留在一端closures的套接字的请求。 这意味着,当我停止后端服务器很短的时间,所有的请求将排队,直到我再次启动并连接到套接字。 这就是我所说的优雅:)

Systemd退出执行导致失败的命令的bash脚本,而不是继续

我试图得到一个脚本,推动我的系统login到CoreOS的logentries。 为了弥补这个事实,实例在AWS上分拆时没有互联网连接,我把这个命令放在了一个while循环中。 从命令行运行脚本while循环工作得很好。 但是,当systemd运行它的脚本时,它会立即退出netcat超时,所以它永远不会再有机会尝试。 有没有办法让systemd对退出脚本不那么积极? 系统输出,永远不会去“睡眠netcat” Jul 23 22:26:21 core-01 systemd[1]: Starting Push journal logs to logentries.com… Jul 23 22:26:21 core-01 systemd[1]: Started Push journal logs to logentries.com. Jul 23 22:26:21 core-01 bash[880]: trying netcat Jul 23 22:26:31 core-01 bash[880]: Ncat: Connection timed out. journal2logentries.sh #!/usr/bin/env bash token=logentriestoken while true do echo 'trying netcat' journalctl […]

在Shell脚本中获得systemd服务文件中的命令返回

我有一个CoreOS集群,我有一个只运行Docker容器的SystemD服务。 然而,为了灵活性的目的,我想要的Dockerregistry的容器从服务启动时被发现被发现,我很容易使用Etcd(从CoreOS项目的节点发现系统)。 所以,我试着在普通的terminal,只是给了我这样一个命令/usr/bin/etcdctl get /services/registry来获取/usr/bin/etcdctl get /services/registry的当前IP地址。 它的工作原理! 但是从SystemD服务来说,命令是以键入的方式返回的,而不是像有人在使用反引号的Shell脚本中那样执行。 我尝试了反引号, $()和${}语法,但是命令仍然按原样返回。 如果有人有一个build议,我正在采取:)谢谢!

SElinux沙箱无法从systemd服务启动

我有一个服务器运行用户提交的代码,进行评估。 我编写了一个启动python应用程序的systemd服务,然后应用程序使用SElinux沙箱运行提交的代码。 沙箱无法启动,出现以下错误 /usr/bin/sandbox: User account must be setup with an MCS Range 但是,当我以普通用户的身份从命令行启动服务器而不是启动systemd服务时,它的运行没有问题。 这是semanage login -l的输出semanage login -l Login Name SELinux User MLS/MCS Range Service __default__ unconfined_u s0-s0:c0.c1023 * root unconfined_u s0-s0:c0.c1023 * system_u system_u s0-s0:c0.c1023 * 我对SELinux的知识是非常有限的,既然它在一般用户启动时工作,我猜这与system_u有关系? 运行Fedora 20。 python应用程序实际上是一个芹菜工作者。

这个variables如何在systemd单元文件中转义工作?

我有一个相当简单的单元文件,用于在CoreOS上运行的服务器实例的发现sidekick服务。 单位文件如下所示: [Unit] Description=Discovery for frontend server (instance %i) BindsTo=frontend@%i.service After=frontend@%i.service [Service] EnvironmentFile=/etc/environment ExecStart=/usr/bin/bash -c ' \ while true; do \ export PORT=$(docker port frontend%i 80 | sed s/.*://); \ etcdctl set /services/frontend/%i "${COREOS_PRIVATE_IPV4}:$PORT" –ttl 60; \ sleep 45; \ done' ExecStop=/usr/bin/etcdctl rm /services/frontend/%i [X-Fleet] MachineOf=frontend@%i.service 这工作正常,但花了很多时间才能到达这个阶段,因为如果我将etcdctl行更改为: etcdctl set /services/frontend/%i "${COREOS_PRIVATE_IPV4}:${PORT}" –ttl 60; \ 然后它不起作用 […]

为什么这个系统单元文件不工作?

原来我有这个脚本运行在Ubuntu上,基本上扔到rc.local #!/bin/bash IBSYSDIR="/home/matthewh/tmp" hca_id=1 if [ -d ${IBSYSDIR} ]; then for hca in ${IBSYSDIR}/*; do if [ -e ${hca}/node_desc ]; then echo -n "$(hostname -s) HCA-${hca_id}" >> ${hca}/node_desc fi hca_id=$((hca_id+1)) done fi 现在我的基础架构是CoreOS,我想恢复这个脚本来为所有节点设置Infiniband主机名。 理想情况下,为了节省pipe理开销,我只想将一个服务文件放到cloud-init中,然后启动它。 所以我想出了下面显示的systemd服务文件。 在提出单个文件奇迹时,我设法将命令缩短到原始文件脚本中的一行。 [ -d ${IBSYSDIR} ] && for hca in ${IBSYSDIR}/*; do [ -e ${hca}/node_desc ] && echo -n "$(hostname -s) […]

nagios.service启动操作超时。 终止

我有一个CentOS 7盒,我已经安装了Nagios,然后从旧的Centos盒子迁移所有的configuration文件。 一切看起来不错, nagios -v不会返回任何错误。 但是,systemd无法启动服务,并给我一个超时。 查找下面的systemctl -l status nagios.service的结果: ● nagios.service – Nagios Network Monitoring Loaded: loaded (/usr/lib/systemd/system/nagios.service; disabled; vendor preset: disabled) Active: failed (Result: timeout) since Fri 2016-02-05 10:52:55 CET; 13min ago Docs: https://www.nagios.org/documentation/ Process: 2259 ExecStart=/usr/sbin/nagios -d /etc/nagios/nagios.cfg (code=exited, status=0/SUCCESS) Process: 2257 ExecStartPre=/usr/sbin/nagios -v /etc/nagios/nagios.cfg (code=exited, status=0/SUCCESS) Feb 05 10:52:52 nagios.adflux.net nagios[2261]: […]

如何在Systemd上使用Jenkins自动重启

我有Jenkins在CentOS7上运行,它不时有崩溃,我想在这种情况发生时自动重启。 谷歌一点点我发现,在Systemd上,你可以使用Restart = on-failure,但问题是从我看到的Jenkins不使用服务文件。 如果我做systemctl状态jenkins.service我得到: ● jenkins.service – LSB: Jenkins Continuous Integration Server Loaded: loaded (/etc/rc.d/init.d/jenkins) Active: active (running) since Mon 2016-02-29 17:30:08 UTC; 11min ago 所以看起来它仍然使用init.d? 任何想法如何在这种情况下,我可以使用此Restart=on-failure ?

PHP脚本与systemd

我是systemd的新手,我的同事给我的脚本有问题。 这个脚本在Debian 7中用作后台进程,但不在Debian 8中。我决定把它重写到systemd。 我有chunk8.service (位于/etc/systemd/system ): [Unit] Description=Chunk-search Daemon Requires=mysql.service apache2.service [Service] PIDFile=/var/run/chunkrm8.pid ExecStart=/usr/bin/php /var/www/chunkrm8/task_pool.php > /dev/null 2>/dev/null Type=forking KillMode=process [Install] WantedBy=multi-user.target 当我重新启动系统(或运行systemctl start chunk8.service )时,我得到: ● chunk8.service – Chunk-search Daemon Loaded: loaded (/etc/systemd/system/chunk8.service; enabled) Active: failed (Result: timeout) since Tue 2016-04-19 16:21:20 MSK; 1min 1s ago 我做错了什么? 提前致谢。