问题标签 [systemd]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
409363 浏览

networking - 如何在 centos 7 上使用 iptables?

我以最少的配置(操作系统 + 开发工具)安装了 CentOS 7。我正在尝试为httpd服务打开 80 端口,但我的 iptables 服务有问题……它有什么问题?我究竟做错了什么?

0 投票
3 回答
3389 浏览

docker - 使用 systemd 套接字激活启动 Docker 容器?

是否可以使用 systemd 的套接字激活功能启动暴露(监听)端口的单个 Docker 容器,例如 Web 服务器?这个想法是通过仅在第一次实际需要时启动容器来节省资源(并且可能在空闲时再次停止以节省资源)。

注意:这个问题不是关于使用套接字激活(已经支持)启动 Docker 守护进程本身,而是关于按需启动单个容器。

0 投票
1 回答
148 浏览

linux - 给出 SIGTERM 后,在多大程度上可以依赖写入磁盘?

我正在为 Linux 开发,并且有一个守护进程,当它被杀死时应该写入磁盘。可以将守护进程配置为SIGTERM在接收到该信号时侦听和写入磁盘。

我也熟悉登录管理器PrepareForShutdown发出的 D-Bus 信号。与禁止关闭和监听信号相比,监听会产生更简单的代码。另一个优点是它可以处理守护进程被礼貌地杀死的情况,即使系统关闭也是如此。SIGTERMPrepareForShutdownSIGTERM

但是,我不确定依靠SIGTERM内核在关闭时发送的信号有多安全。在关机时SIGTERM总是发送给每个进程有足够的时间来执行一个小的(< 1 kB)写入磁盘?

我担心的一个问题是,我可能有足够的时间在某些硬件上写入磁盘,但在其他硬件上却没有,因此似乎很难测试。信号也可以这样说PrepareForShutdown,但至少为磁盘写入留出足够的时间是该信号合同的一部分。SIGTERM我的问题是每个进程在关闭时收到的信号是否可以这样说。

0 投票
2 回答
2834 浏览

mono - 单声道服务的 systemd 配置

我可以在 Fedora 19 上使用 mono-service 将 mono 应用程序作为守护进程运行。

要设置一些环境变量,我首先必须执行一个脚本

然后我可以使用作为守护进程运行单声道应用程序

我希望应用程序作为具有 systemd 配置的服务自动启动。我的尝试没有成功

我的配置是

用户已将脚本添加到 .bash_profile

征求任何关于我做错或应该做的事情的指示。

0 投票
2 回答
2933 浏览

node.js - 为什么运行 Node.js 应用程序的 systemd 服务在正确停止时显示失败状态?

我有一个运行 Node.js 应用程序的 systemd 服务文件。该服务似乎运行良好,但是当我停止该服务时,使用systemctl stop train该服务会进入失败状态。

我的服务文件如下所示:

我怀疑 Node.js 应用程序正在返回 systemd 认为失败的状态代码。如果可能的话,我不确定是否需要让我的 Node.js 应用程序返回不同的状态码。或者,如果我需要修改 systemd 服务文件以某种方式采取不同的行动。

如果有帮助,部署脚本在这里:https ://github.com/JonathanPorta/ansible-train

实际的 Node.js 应用程序在这里: https ://github.com/JonathanPorta/train

在此先感谢您的帮助!

0 投票
2 回答
2843 浏览

linux-kernel - 无法更改 gpio 值

目前我正在尝试在 2.6.39 linux 内核上使用 systemd 检查 Tixi 板的启动时间。为此,我创建了一个服务文件,该文件调用一个设置和使用 gpio 的 bash 脚本。问题是我的系统不允许我更改 gpio 的值。我可以成功地导出它,改变它的方向,但不能改变它的值。我已连接示波器以检查硬件中的值是否已更改,但未按照某些论坛的建议在文件中更新,但它是相同的:值只是没有改变!我还应该指出,如果我使用系统 V,相同的脚本正在工作,内核、busybox 和文件系统的配置完全相同。

这很讽刺,因为我已经是系统的根,但是即使更改文件的权限,也不允许我更改其值。内核也没有反馈说该操作是不可能的,而是看起来好像是可能的,但是当我检查值时,它和以前一样。

我还尝试使用 3.12(我将其更改为 systemd)在 Raspbian 中运行它,实际上它是可以做到的,只是从用户空间以正常方式。

如果您有任何想法,我将不胜感激,因为我已经没有想法了,可能是什么问题。

谢谢

PS:这是应该在 bash 行上工作的代码:

尽管如此,如果我使用 systemV,同一块板上的相同代码行可以工作,但如果我使用 systemd,则不能

0 投票
1 回答
5355 浏览

linux - systemd 受控服务如何区分关机和重启?

我有一个在 RHEL7 上运行并由 systemd 启动的 Linux 进程。当进程停止时,我需要知道它是否因为系统关闭或重新启动而被停止,并且我需要能够区分这两者。

以前,在 RHEL6 上的 init 下,我可以通过查看用于调用我的 init 脚本的路径名来做到这一点,并相应地向进程发送不同的信号,即:

这不适用于 systemd...虽然我的 init 脚本在正确的时间被调用,但 $0 总是相同的(/etc/init.d/scriptname)。

systemd 下是否有某种方法可以知道您是否因为系统关闭或重新启动而被调用?我很高兴摆脱 init 脚本并将其配置为 systemd 目标,但是从文档中我看不到做我想做的事情的方法。

0 投票
2 回答
27459 浏览

shell - tmux open terminal failed: not a terminal

I have a shell script that is enabled as service to start multiple shell scripts e.g.

script1 should open a program in a tmux window, and it does work just fine if I manually start the script via ./script1.sh, however when started at boot via the service started script it does not with the above error:

Why is this happening?

0 投票
0 回答
5112 浏览

linux - 无法在 Ubuntu 上运行 systemd 服务守护进程(如何切换到 Upstart 或者是否有更新的发行版)

注意:我没有任何实际管理服务器或在任何深度级别使用 Linux 的经验,因此我的知识和理解非常有限。从本质上讲,我正在即兴发挥。

有关完整的代码示例,请参见:https ://github.com/Integralist/Vagrant-Examples/tree/master/nodejs


这是一个两部分的问题:

  1. 无法挂载我的共享目录
  2. systemd服务不可用

我正在尝试创建一个启动 NodeJS 应用程序的服务,但它看起来systemctl在我安装的 Ubuntu 版本上不可用(https://vagrantcloud.com/ubuntu/trusty64)。

这是我的Vagrantfile

以下是setup.sh创建.service文件的配置脚本的内容:

但是当我运行时,vagrant up我得到以下错误输出:

所以我的第一个问题是我似乎无法挂载我的共享文件夹。

此外,最初在我的配置脚本中(在创建our-node-app.service文件之后)我将拥有以下内容:

如果我将其添加回我的配置脚本然后运行,vagrant provision --provision-with shell我将得到以下输出:

这是我发现systemctl命令不可用的问题的地方。

我还尝试修改配置脚本,而不是...

...我会用...

这是因为我在某个地方读到了 Ubuntu 不支持的内容systemd,而是使用了一些名为upstart来启动其所有服务的东西。我当时假设我可以只使用另一个命令并保持脚本本身相同(似乎不是这种情况)。

但所做的所有更改都表明我的服务没有得到认可:

然后我发现Ubuntu 终究会转向这种systemd格式:但这是在 2014 年 2 月宣布的,所以我本以为最新的 Ubuntu 现在已经切换了(或者只是我是个白痴而不欣赏这样的改变需要多长时间)。

认为我必须使用这种 Upstart 格式,我已经开始阅读这个,但遗憾的是我无法弄清楚如何将我的systemd脚本转换为 Upstart 的格式。


这给我留下了一个问题:这里有没有其他人遇到过这个问题,如果有,他们是如何解决的(您是否切换到支持systemd或重写您的服务以使用 Upstart 格式的不同 Ubuntu 版本)?

您对如何将systemd脚本转换为 Upstart 格式有任何建议(或好的资源)吗?

对此主题的任何帮助将不胜感激;正如我在开始时提到的,我不是系统/服务器操作人员,所以我在这里做准备。

谢谢。

更新

我发现了这一点,似乎我误解了 和 之间的systemd区别。一个基于和改进的全新系统也是如此。init.dupstartsystemdinit.dupstart

链接到的文章解释了如何安装systemdupstart然后切换到systemd,但我在尝试安装 VM 时仍然遇到错误?

我已经更新了我的回购代码。

0 投票
3 回答
5479 浏览

systemd - 如何在 coreOS 上将 etcd 值添加到我的 systemd 服务中?

我有两个服务 A 和 B。

A 在启动时在 etcd 中设置一个值,比如它从环境文件中获取的公共 IP 地址:

B 在启动时需要该值以及它自己的 IP 地址。所以这样的事情会很好:

但这显然是不可能的,因为 etcd 变量不会像这样的 systemd 环境变量出现。/usr/bin/bash -c 'run stuff'相反,我可以在 my中做一些事情,ExecStart但这很尴尬,尤其是当我需要 systemd 来扩展$COREOS_PUBLIC_IPV4和我的新 bash shell 来扩展时$(etcdctl get /A_ADDR)。它还散发着代码气味,让我觉得我错过了一些重要的东西。

有人能告诉我从 etcd 获取值到我的ExecStart声明中的“正确”方式吗?

- 更新

所以我准备好了

但这很丑陋。仍然不敢相信我没有错过任何东西..