我正在开发一个 Nodejs 应用程序,用户通过 localhost 上的 HTTP 与之交互。几乎没有参数,守护进程几乎没有依赖关系,它只需要在登录时启动。
我想按照每个平台上的习惯用法来启动脚本,这意味着 Ubuntu 上的 Upstart 和 Fedora 上的 systemd。
我找到了这些资源:
我主要是在寻找各种 API 作为参考,以及要遵循的基本格式。
journalctl在 CentOS 7 系统下执行只会打印上次启动后生成的消息。
命令
# journalctl --boot=-1
Run Code Online (Sandbox Code Playgroud)
印刷
Failed to look up boot -1: Cannot assign requested address
Run Code Online (Sandbox Code Playgroud)
并以状态 1 退出。
将它与当前的 Fedora 系统进行比较,我注意到 CentOS 7 没有/var/log/journal(journalctl也没有提供--list-boots)。
因此,我的问题是如何显示在上次启动日期之前写入的日志消息。
或者,也许这个功能必须在 CentOS 7 上启用?
(journalctl手册页将“systemd 208”列为版本号。)
我有一项服务突然停止。我试图重新启动该服务但失败并要求运行“systemctl daemon-reload”。
它究竟是做什么的?什么是“守护进程重新加载”?
systemctl
Run Code Online (Sandbox Code Playgroud)
返回单元列表,无论它们是否已加载、活动、它们的子项和描述。
systemctl is-failed
Run Code Online (Sandbox Code Playgroud)
仅返回状态列表。
返回失败单元详细信息的语法是什么?
这是关于 linux,但如果有人知道一般的 *nix 方法会很好。
我昨天在插入以太网电缆的情况下启动了一个系统。“NetworkManager”没有安装,所以一旦它启动,我就去寻找以太网接口的名称ifconfig来手动启动一个 DHCP 客户端,但除了lo.
NIC 通过 列出lspci,并加载了适当的内核驱动程序。系统通常使用 wifi,我记得它的接口名称是wlan0. 当我尝试时ifconfig wlan0 up,wlan0出现了。但是我能记住的唯一以太网接口名称是eth[N]和em[N]- 两者都不起作用。
本文档提到了“可预测的接口名称”,但并没有很好地用简单的术语解释它们可能是什么。它确实引用了一段源代码,这意味着在这种情况下,名称可能是从 PCI 总线和插槽编号推断出来的,这似乎是一个不必要的复杂麻烦。
其他搜索使我相信这可能是由systemd与 一起确定的udev,但是有将近 100 个文件/usr/lib/udev/rules.d并且花了一个小时试图确定在哪里(以及是否)有一个 systemd 配置文件,这似乎也很荒谬。
这也将是不错的肯定知道,他们是可用的,不只是他们怎么可能被命名为,如果是这样,所以我可以排除硬件问题等是不是有一个简单的方法来找到可用的网络接口的名称在Linux上?
如何防止长字符串在终端中被截断?例如,如果我跑
journalctl -xn
有很多文字我无法阅读。我愿意使用其他程序/工具。
是否有一种简单的方法可以找出正在使用的 initsystem,例如最近的系统Debian wheezy或Fedora系统正在使用哪个 initsystem ?我知道Fedora 21使用systemdinitsystem 但那是因为我读过它并且因为所有相关的脚本/符号链接都存储在/etc/systemd/. 但是,我不确定例如Debian squeeze或CentOS 6 or 7等等。
有哪些技术可以验证这种初始化系统?
我最近安装了dnsmasq作为本地网络的 DNS 服务器。dnsmasq 侦听端口 53,该端口已被systemd-resolved的本地 DNS 存根侦听器使用。
只需停止 systemd-resolved,然后在 dnsmasq 运行后重新启动它即可解决此问题。但它在重新启动后返回:systemd-resolved 优先启动,dnsmasq 将不会启动,因为端口 53 已在使用中。
我想,第一个明显的问题是我如何最好地让 systemd-resolved 理解它不应该启动本地 DNS 存根侦听器,从而保留端口 53 以供 dnsmasq 使用?
然而,一个更有趣的问题是这两种服务通常如何协同工作。他们甚至打算并排工作还是只是在使用 dnsmasq 的情况下被 systemd 解决?
使用sysvinit,这样的sudoers条目就足够了:
%webteam cms051=/sbin/service httpd *
Run Code Online (Sandbox Code Playgroud)
这将允许以下命令:
sudo service httpd statussudo service httpd restart现在,使用systemd,服务名称是最后一个参数。即,服务重启将通过以下方式完成:
systemctl restart httpd.service
Run Code Online (Sandbox Code Playgroud)
自然,我认为定义命令systemctl * httpd.service会起作用,但这会允许类似systemctl restart puppet.service httpd.service的效果不是预期的。
考虑到这一点,那么允许非 root 用户控制systemd服务的最佳方式是什么?这不需要是sudoers;也许文件权限更改可能就足够了?
注意:我在 Medium 上写了一篇文章,解释了如何创建服务,以及如何避免这个特定问题:Creating a Linux service with systemd。
原问题:
我正在使用 systemd 来保持工作脚本始终工作:
[Unit]
Description=My worker
After=mysqld.service
[Service]
Type=simple
Restart=always
ExecStart=/path/to/script
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
虽然如果脚本在几分钟后正常退出,重启工作正常,但我注意到如果它在启动时反复执行失败,systemd将放弃尝试启动它:
Jun 14 11:10:31 localhost systemd[1]: test.service: Main process exited, code=exited, status=1/FAILURE
Jun 14 11:10:31 localhost systemd[1]: test.service: Unit entered failed state.
Jun 14 11:10:31 localhost systemd[1]: test.service: Failed with result 'exit-code'.
Jun 14 11:10:31 localhost systemd[1]: test.service: Service hold-off time over, scheduling restart.
Jun 14 11:10:31 localhost systemd[1]: test.service: Start request repeated too …Run Code Online (Sandbox Code Playgroud)