我有一个要在启动时运行的 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 运行脚本,它工作得很好。
你们中有人知道我的问题是什么吗?
除了TokyoMEWS自己发现的……
显然,如果您的脚本启动其他内容,则需要“Type=forking”
(这并不完全正确 -Type=forking
只有当您的脚本在其子项运行时退出时才需要)
...其他可能的问题是:
我猜“在屏幕上显示”是指脚本只是向标准输出写入一些内容。这并没有往屏幕在引导过程中-更确切地说,从服务的stdout一切都发送到日志(或根据您的systemd版本到syslog)。
如果您确实尝试写入屏幕(例如使用echo Hi >/dev/tty1
),那么当agetty在显示登录提示之前清除屏幕时,脚本的输出很可能会消失。(为避免这种情况,您必须订购该装置After=getty@tty1.service
)。
要将某些内容写入文件,您需要以读写方式安装文件系统。为此,After=local-fs.target
可能是必要的,否则设备可能会过早再次启动。但这取决于特定的操作系统配置。
归档时间: |
|
查看次数: |
9427 次 |
最近记录: |