如手册页所述,
systemctl --now enable servicename
Run Code Online (Sandbox Code Playgroud)
应该启用并启动服务。
但在许多不同的发行版下,它对我来说从来没有用过。
而输出:
systemctl is-enabled 启用,
systemctl is-active 该服务仍处于非活动状态。
这个开关有什么用?
我尝试过其他组合,例如:
systemctl enable --now servicename
Run Code Online (Sandbox Code Playgroud)
和:
systemctl enable servicename --now
Run Code Online (Sandbox Code Playgroud)
但还是一样;我systemctl start servicename每次都必须手动,即使上一个命令(即enable部件)成功执行。
应用程序对systemd服务的实现是否应该支持它在单元文件中的某处实现该功能;许多知名服务没有遵循,这让我认为它完全无用;我假设考虑过它。
有人可以为我澄清systemd 单元的“启用”和“激活”之间的区别。据说,如果单元有 [Install] 部分,则应调用enable,否则只需激活即可。
这是如何在启动过程中处理的?Systemd 会自动做出正确的决定吗?
背景
我正在编写一个要在 Raspberry Pi 2 上的 Raspbain 中运行的简单脚本,只需打开一个 LED 以指示我已准备好从台式计算机连接 SSH。
脚本在这里并不重要,只提一下,因为我使用频率控制,所以脚本运行无限循环,频繁地打开和关闭 LED。所以这是一个简单服务的例子。但是,至少这个问题的公认答案建议我将类型设置为空闲。所以我的服务文件看起来像
[Unit]
Description=Turn on LED after SSH is ready
[Service]
Type=idle
ExecStart=/usr/bin/sshready.py
[Install]
Wants=network-online.target
After=network-online.target
Run Code Online (Sandbox Code Playgroud)
影响
该服务按预期运行。但是,我注意到在 LED 亮起后立即在台式计算机中启动 Putty 时,登录提示不会立即出现。所以我检查了
$ systemd-analyze plot > output.svg
Run Code Online (Sandbox Code Playgroud)
结果显示
题
看起来我的服务没有在 之后启动network-online.target,这里有什么问题,我该如何解决?
使用 Fedora 24,我在 /etc/fstab 中配置了一个外部 USB 驱动器:
UUID=6826692e-79f4-4423-8467-cef4d5e840c5 /backup/external ext4 defaults 0 0
Run Code Online (Sandbox Code Playgroud)
当我拔下 USB 磁盘并重新启动时,它无法启动
那是错误信息:
[ TIME ] Timed out waiting for device dev-disk-by\x2duuid-6826692e\x2d79f4\x2d4423\x2d8467\x2dcef4d5e840c5.device.
[DEPEND] Dependency failed for /backup/external.
[DEPEND] Dependency failed for Local File Systems.
[DEPEND] Dependency failed for Relabel all filesystems, if necessary.
[DEPEND] Dependency failed for Mark the need to relabel after reboot.
Run Code Online (Sandbox Code Playgroud)
为什么不开机?这是一个错误吗?一项功能?systemd的?我知道这是我的错误,我不得不将选项设置为“noauto”,但无论如何,为什么启动过程会因为缺少 FHS 的非关键目录而停止?
我想在每次登录时(或每次启动时,如果这不起作用)运行此命令: xmodmap -e 'keysym Delete = Menu' -e 'keysym Menu = Delete'
我尝试了很多东西。我把命令放在System > Preferences > Startup Applications. 我把它放在一个.sh文件中,标记它chmod +x并将该文件放在System > Preferences > Startup Applications. 我把脚本放在/etc/init.d. 我把命令放在~/.profile. 似乎没有任何效果。
最后,我把它放在我的~/.profile:
touch test1
xmodmap -e 'keysym Delete = Menu' -e 'keysym Menu = Delete'
touch test2
Run Code Online (Sandbox Code Playgroud)
test1 和 test2 都被创建,但键仍然没有重新映射。如果我只是复制/粘贴命令并手动运行它,它工作正常。但它不会在登录时运行。有任何想法吗?
我经常安装 Debian。为此,我有一个全自动的 preseed.cfg;在 preseed 结束时,它从我的 TFTP 服务器下载并运行 postinstall.sh 脚本,该脚本执行一些额外的自定义。
我正在从 GNOME 切换到 LXQTE,并使用 SDDM 而不是 GDM。但是,对于我的硬件而言,SDDM 尝试启动得太快。为了解决这个问题,我一直在使用systemctl edit sddm添加以下内容:
[Service]
ExecStartPre=/bin/sleep 5
Run Code Online (Sandbox Code Playgroud)
这很好用,我想通过将它添加到 postinstall.sh 脚本来自动化这个过程。但是,我不知道如何systemctl edit通过 bash 脚本将文件内容传递给。我怎样才能做到这一点?
我有一些我运行的命令,rc.local所以它们在启动序列中最后运行。我想知道是否有类似的工具可以在关闭时撤消这些命令的结果,例如rc.shutdown. 理想情况下,它将在任何其他/etc/init.d脚本之前运行。
我在 BusyBox 中编译了一个自定义的 linux 内核。BusyBoxinit不支持运行级别。当内核在 BusyBox 中启动时,它首先执行init它在/etc/inittab. BusyBoxinit没有/etc/inittab. 当没有inittab找到时,它具有以下行为:
::sysinit:/etc/init.d/rcS
Run Code Online (Sandbox Code Playgroud)
这部分对我来说很清楚,但我想知道如何管理启动网络、创建串行端口或启动java进程的守护进程。我查看了驻留在其中的脚本,/etc/init.d/但我不明白如何管理它们。我正在寻找一个很好的教程或解决方案来自己控制这些服务,而无需像buildroot. 我想了解这些脚本是如何工作的以及如何在中创建设备/dev/(现在我只有console和ttyAM0)。
我已经在基于 Ubuntu 的服务器上安装了 redis 服务器,因此我可以启动/停止/重启 redis 服务器。redis_server.sh 已经在 /etc/init.d 中。
现在我想让 redis 在启动时启动。我从一个网站了解到,通过使用 update_rc.d 命令,我可以在启动时添加/删除服务。
我尝试了 update-rc.d 在启动时添加启动,这不起作用:
root@ip-172-31-4-108:/etc/init.d# update-rc.d redis-server defaults
//System start/stop links for /etc/init.d/redis-server already exist.
Run Code Online (Sandbox Code Playgroud)
另外,有一些服务我不想开机就启动,所以我尝试了:
root@ip-172-31-4-108:/etc/init.d# update-rc.d reids_6379 remove
Removing any system startup links for /etc/init.d/reids_6379 ...
Run Code Online (Sandbox Code Playgroud)
但是下次重新启动时,我仍然看到该服务在启动时运行。
sudo ufw enable
Run Code Online (Sandbox Code Playgroud)
防火墙在系统启动时处于活动状态并启用
sudo ufw status
Status: active
Run Code Online (Sandbox Code Playgroud)
但是在我重新启动系统并运行后sudo ufw status,我收到消息:
Status: inactive
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
顺便说一下,我的/etc/ufw/ufw.conf确实有ENABLED=yes.