问题标签 [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 投票
1 回答
4198 浏览

linux - 如何在 systemd 启动期间最后运行并打印我的脚本输出?

我正在尝试在部署过程中配置我的主机,并在屏幕上显示我的配置脚本正在做什么。

在 RHEL6 中,我很容易回显我想要筛选的内容或使用对话框来显示输出,只有当我的脚本完成时,我才会得到登录提示。

  • (我使用脚本名称为 S99.myscript.sh 的 rc3.d 或 rc5.d 文件夹)

在 RHEL7 中我无法模仿这个过程。rc.local 在引导过程中不显示我的输出,也不保证它会最后运行。

我想我需要创建一个 systemd 服务文件来运行我的脚本。

但是如何在启动时将结果输出到屏幕上?

以及如何确保在脚本结束之前不会收到登录提示?

0 投票
1 回答
963 浏览

linux - 如何在独立 cgroup 中从 systemd 服务运行外部程序

我需要从当前 cgroup 之外的 systemd 服务运行外部程序。我找到了一个systemd-run可能会解决这个问题的工具,但我被 systemd 版本 204 卡住了,它还不可用。还有其他解决方案吗?

我的问题更详细:

应用程序捆绑在 debian 包中,并将作为 systemd 服务安装和运行。该服务稍后会下载较新版本的应用程序并运行dpkg -i myapplication.deb。在安装升级过程中必须停止服务 - 但直到 cgroup 中的所有进程结束后才会停止。现在我们遇到了死锁,因为dpkg它本身就在这个 cgroup 中运行。服务停止超时后,dpkg被杀死并且未安装升级。

0 投票
2 回答
1062 浏览

shutdown - Systemd - 在 `ExecStop=` 期间运行实用程序 Docker 容器

我正在测试 CoreOS,看看它是否满足我们的需求,到目前为止,进展有点慢,但还可以。我喜欢 systemd,但它似乎不能正常工作——特别是在关机时。

我的目标

我的目标是在服务启动和停止时运行一个脚本,分别从我们的 DNS 服务器添加和删除服务记录。它在系统启动时启动服务,或者手动启动或关闭服务时起作用 - 但在系统重新启动或停止时(shutdown -r now, shutdown -h now)不起作用。

这是一个稍微简化的 docker 注册表服务版本,我正在使用该服务作为示例:

(这个单元与另一个单元一起工作 - registry-ui.service。当一个单元启动时,另一个单元也会这样做。)

注意Conflicts=...线。我花了一些时间试图弄清楚为什么服务没有正确关闭后添加了它。它什么也没做。然而,根据文档,服务Conflicts=shutdown.target默认有一行。当服务发生冲突并且一个启动时,另一个关闭 - 或者文档说。

我错过了什么?为什么我的ExecStop=线路不运行?


更新

我已经确定ExecStop=线路确实运行。使用journalctl -u registry.service -n 200给了我这个消息:

这表明问题是(正如我在评论中推测的那样)我的 docker 容器在关闭期间不会启动。我在我的[Unit]部分中添加了以下几行:

新行对 journalctl 错误没有影响,所以我现在的问题是,有没有办法在关闭之前运行实用程序 docker 容器?

0 投票
2 回答
4268 浏览

docker - 通过 systemd 在 CoreOS 中启用 etcd 服务自动启动

我已经部署了一个带有 VMware 映像的 CoreOS 独立服务器,请按照本指南体验 CoreOS。

部署成功后,发现我的CoreOS只启用了Docker服务,没有运行etcd和fleet服务。虽然我知道如何使用 systemd 手动运行 etcd 和队列服务。而且我也知道使用适当的云配置可以安装 CoreOS,其中 etcd 和队列服务会自动启动。

但我想知道:

  1. 是否可以放置一个单元文件/etc/systemd/system以使 systemd 自动启动 etcd 服务?
  2. 如果可以,单元文件的内容是什么?
  3. 如果不能,还有什么办法?

谢谢

0 投票
0 回答
1842 浏览

service - 为什么我的 systemd 启动脚本不运行?

我试图在我的 debian 测试机器上启动时运行一个简单的脚本。我遵循了一些指南,但服务没有启动。有人可以告诉我我做错了什么吗?在我开始在互联网上抱怨它之前,我想了解 systemd。

我创建/etc/systemd/system/startup-scripts.service(有时在这里,有时作为 /lib/systemd/system/my-file.service 的符号链接)并写道

然后跑

我还归档了 /usr/bin/startup-script.sh,使其可执行并运行它。据我所知,脚本会运行,但我的重启没有结果。

我猜答案将涉及 journalctl。不太确定我在这里看的是什么。如果多用户是错误的目标,我也不会感到惊讶。这是看起来最合理的一个,但我对它的用途并不十分自信。

0 投票
1 回答
724 浏览

linux - ts_calibrate 无法从 systemd 脚本运行

我有一个由 systemd 在启动时运行的脚本。它运行我的应用程序,如果用户退出应用程序,则脚本运行 ts_calibrate,完成后它再次运行我的应用程序。在 Angstrom 上运行良好,但在运行 Debian 的 Beaglebone Black 上却不行。

我的 mita.sh 脚本

当系统现在启动时,我的应用程序启动正常,但是当我退出应用程序 ts_calibrate 时无法运行。我收到以下错误:-

ts_open:没有这样的文件或目录

如果我以 root 身份登录,那么我可以从命令行运行脚本,一切都按预期工作。
如果从命令行输入,sudo ts_calibrate那么我会得到同样的错误。
有人可以帮我理解这里发生了什么吗?
如果我以 root 身份 ssh,我可以成功运行脚本,但如果我随后 sudo,我似乎没有运行 ts_calibrate 的权限!systemd 似乎也没有正确的权限!

问候,
詹姆斯。

.
.
.
系统服务

.
uname -a
Linux beaglebone 3.8.13-bone67 #1 SMP Wed Sep 24 21:30:03 UTC 2014 armv7l GNU/Linux

0 投票
2 回答
2973 浏览

digital-ocean - 在 CoreOS 云配置中执行命令(例如添加交换)

我看到与标准文件不同的是,CoreOS文件cloud-config中没有选项。目前,我通过将以下内容添加到我的 CoreOS 机器上启用交换:runcmdcloud-configcloud-config

然后在初始化我的 CoreOS 映像后,我必须 ssh 进入机器并运行:

在启用交换之前(例如,由 证明top)。

似乎我应该能够在cloud-config文件本身中完成后面的命令,但我不清楚如何在runmcd没有cloud-config. 也许这可以通过编辑我的swap.service单元或添加另一个来完成unit,但我还没有弄清楚如何。

所以,这给我留下了两个问题:(1)这可以完成还是总是需要手动运行最后一个命令?(2) 如果是前者,那又如何?

0 投票
1 回答
177 浏览

node.js - 为什么 systemd 重新启动我的 node.js 应用程序时找不到我的 css/js 文件?

我有 node.js 应用程序,我正在尝试使用 systemd 在生产模式下部署它以在服务器崩溃/重新启动时重新启动它。当我使用“node app.js”启动该应用程序时,该应用程序运行良好(即找到了我的所有公共文件)。但是,当我终止进程并 systemd 重新启动它时,Express 无法再找到我的 css/js 文件。我正在使用 connect-assets 连接我的 css/js 文件。

我认为问题出在我的节点路径上,但我并不完全确定。这是我在 systemd 重新启动应用程序时在浏览器中看到的错误:

当我检查使用“node app.js”命令手动启动的过程时,我看到:

当 systemd 重新启动应用程序时,我看到以下内容:

这是我的服务文件:

0 投票
1 回答
2351 浏览

java - 来自 Java 的 sd_notify()

我有一个从systemd的用户实例启动的 Java 服务(使用Dropwizard实现) 。到目前为止,一切都很好。现在我想使用 systemd 的通知功能来使其了解服务状态(可作为C 库函数shell 脚本使用,但最终这两种方法都与环境变量引用的套接字通信)。当服务完成启动时,我可以运行任意代码,但我不确定如何最好地从 Java 中通知 systemd。

其他开发人员在 Windows 上运行此服务,因此如果我的通知代码谨慎且不使用 systemd 运行时不会导致任何输出,那么对于奖励积分将非常有用。

0 投票
1 回答
788 浏览

java - 从 Java 环境中接收打开的套接字

systemd支持套接字激活,这意味着套接字将作为打开的文件描述符传递给守护进程。有没有办法从 Java 中检索和使用这些套接字?