问题标签 [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.
linux - 如何在 systemd 启动期间最后运行并打印我的脚本输出?
我正在尝试在部署过程中配置我的主机,并在屏幕上显示我的配置脚本正在做什么。
在 RHEL6 中,我很容易回显我想要筛选的内容或使用对话框来显示输出,只有当我的脚本完成时,我才会得到登录提示。
- (我使用脚本名称为 S99.myscript.sh 的 rc3.d 或 rc5.d 文件夹)
在 RHEL7 中我无法模仿这个过程。rc.local 在引导过程中不显示我的输出,也不保证它会最后运行。
我想我需要创建一个 systemd 服务文件来运行我的脚本。
但是如何在启动时将结果输出到屏幕上?
以及如何确保在脚本结束之前不会收到登录提示?
linux - 如何在独立 cgroup 中从 systemd 服务运行外部程序
我需要从当前 cgroup 之外的 systemd 服务运行外部程序。我找到了一个systemd-run
可能会解决这个问题的工具,但我被 systemd 版本 204 卡住了,它还不可用。还有其他解决方案吗?
我的问题更详细:
应用程序捆绑在 debian 包中,并将作为 systemd 服务安装和运行。该服务稍后会下载较新版本的应用程序并运行dpkg -i myapplication.deb
。在安装升级过程中必须停止服务 - 但直到 cgroup 中的所有进程结束后才会停止。现在我们遇到了死锁,因为dpkg
它本身就在这个 cgroup 中运行。服务停止超时后,dpkg
被杀死并且未安装升级。
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 容器?
docker - 通过 systemd 在 CoreOS 中启用 etcd 服务自动启动
我已经部署了一个带有 VMware 映像的 CoreOS 独立服务器,请按照本指南体验 CoreOS。
部署成功后,发现我的CoreOS只启用了Docker服务,没有运行etcd和fleet服务。虽然我知道如何使用 systemd 手动运行 etcd 和队列服务。而且我也知道使用适当的云配置可以安装 CoreOS,其中 etcd 和队列服务会自动启动。
但我想知道:
- 是否可以放置一个单元文件
/etc/systemd/system
以使 systemd 自动启动 etcd 服务? - 如果可以,单元文件的内容是什么?
- 如果不能,还有什么办法?
谢谢
service - 为什么我的 systemd 启动脚本不运行?
我试图在我的 debian 测试机器上启动时运行一个简单的脚本。我遵循了一些指南,但服务没有启动。有人可以告诉我我做错了什么吗?在我开始在互联网上抱怨它之前,我想了解 systemd。
我创建/etc/systemd/system/startup-scripts.service
(有时在这里,有时作为 /lib/systemd/system/my-file.service 的符号链接)并写道
然后跑
我还归档了 /usr/bin/startup-script.sh,使其可执行并运行它。据我所知,脚本会运行,但我的重启没有结果。
我猜答案将涉及 journalctl。不太确定我在这里看的是什么。如果多用户是错误的目标,我也不会感到惊讶。这是看起来最合理的一个,但我对它的用途并不十分自信。
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
digital-ocean - 在 CoreOS 云配置中执行命令(例如添加交换)
我看到与标准文件不同的是,CoreOS文件cloud-config
中没有选项。目前,我通过将以下内容添加到我的 CoreOS 机器上启用交换:runcmd
cloud-config
cloud-config
然后在初始化我的 CoreOS 映像后,我必须 ssh 进入机器并运行:
在启用交换之前(例如,由 证明top
)。
似乎我应该能够在cloud-config
文件本身中完成后面的命令,但我不清楚如何在runmcd
没有cloud-config
. 也许这可以通过编辑我的swap.service
单元或添加另一个来完成unit
,但我还没有弄清楚如何。
所以,这给我留下了两个问题:(1)这可以完成还是总是需要手动运行最后一个命令?(2) 如果是前者,那又如何?
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 重新启动应用程序时,我看到以下内容:
这是我的服务文件:
java - 来自 Java 的 sd_notify()
我有一个从systemd的用户实例启动的 Java 服务(使用Dropwizard实现) 。到目前为止,一切都很好。现在我想使用 systemd 的通知功能来使其了解服务状态(可作为C 库函数或shell 脚本使用,但最终这两种方法都与环境变量引用的套接字通信)。当服务完成启动时,我可以运行任意代码,但我不确定如何最好地从 Java 中通知 systemd。
其他开发人员在 Windows 上运行此服务,因此如果我的通知代码谨慎且不使用 systemd 运行时不会导致任何输出,那么对于奖励积分将非常有用。