Systemd 无法启动脚本?

Tok*_*EWS 9 systemd

我有一个要在启动时运行的 BASH 脚本。我的系统正在运行 systemd,所以我创建了一个 .service 文件,其中包含我认为必要的信息:

[Unit]
Description=My Script
After=network.target

[Service]
ExecStart=/home/myscript.sh

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

我使用 systemctl enable 来“注册”它并重新启动。在启动时,我被告知我的脚本将被执行,但根据我在脚本中编写的内容,我既看不到 ECHO 应该在屏幕上显示的任何消息,也没有将内容写入文件。此外,它不会启动它应该启动的应用程序。

Systemctl status 告诉我脚本已经运行并成功退出。尽管如此,该脚本仍然无效。如果我从 shell 运行脚本,它工作得很好。

你们中有人知道我的问题是什么吗?

use*_*686 7

除了TokyoMEWS自己发现的……

显然,如果您的脚本启动其他内容,则需要“Type=forking”

(这并不完全正确 -Type=forking只有当您的脚本在其子项运行时退出时才需要)

...其他可能的问题是:

  1. 我猜“在屏幕上显示”是指脚本只是向标准输出写入一些内容。这并没有往屏幕在引导过程中-更确切地说,从服务的stdout一切都发送到日志(或根据您的systemd版本到syslog)。

  2. 如果您确实尝试写入屏幕(例如使用echo Hi >/dev/tty1),那么当agetty在显示登录提示之前清除屏幕时,脚本的输出很可能会消失。(为避免这种情况,您必须订购该装置After=getty@tty1.service)。

  3. 要将某些内容写入文件,您需要以读写方式安装文件系统。为此,After=local-fs.target 可能是必要的,否则设备可能会过早再次启动。但这取决于特定的操作系统配置。