在 Ubuntu Linux 16.04.3 中,如何在 fstab 之后运行依赖于首先安装的另一个硬盘的脚本?
我努力了:
- 在 /etc/init.d 中创建服务脚本,但该脚本在 fstab 之前执行。
- 添加到 /etc/rc.local,但问题相同。
答案1
我相信您需要systemd
在 Ubuntu 16.04 上使用较新的服务,而不是/etc/init.d
。在这里,您将创建一个服务文件以在之后运行您的脚本local-fs.target
。
让我向你展示一个如何实现这一目标的示例。
service
在/etc/systemd/system
目录中创建所需文件该文件看起来如下:
[Unit] Description=Script to run after fstab After=local-fs.target [Service] Type=simple ExecStart=/bin/bash -c "/script/to/run.sh" [Install] WantedBy=multi-user.target
当然,你可以使用以下命令设置服务:
sudo systemctl start <name_of_service> sudo systemctl enable <name_of_service>
这就是可以做到的,请注意,我还没有亲自测试过,这里是文档链接,可以为您提供进一步的帮助。请查看服务文件中各个字段可用的其他选项。
https://access.redhat.com/articles/754933
https://www.freedesktop.org/software/systemd/man/bootup.html
https://www.freedesktop.org/software/systemd/man/systemd.html#
注意:noauto
fstab 挂载选项在这里很重要看
local-fs-pre.target
|
v
(various mounts and (various swap (various cryptsetup
fsck services...) devices...) devices...) (various low-level (various low-level
| | | services: udevd, API VFS mounts:
v v v tmpfiles, random mqueue, configfs,
local-fs.target swap.target cryptsetup.target seed, sysctl, ...) debugfs, ...)
| | | | |
\__________________|_________________ | ___________________|____________________/
\|/
v
sysinit.target
|
____________________________________/|\________________________________________
/ | | | \
| | | | |
v v | v v
(various (various | (various rescue.service
| | | v
v v v emergency.target
display- (various system (various system
manager.service services services)
| required for |
| graphical UIs) v
| | multi-user.target
| | |
\_________________ | _________________/
\|/
v
graphical.target
从上图可以看出,您的目标是否local-fs.target
完全sysinit.target
确定,因为后者涵盖了所有文件系统。因此,您需要决定脚本运行的阶段,以获得所需的效果。
您还可以将特定挂载点设置为目标foobar.mount
。使用 查找完整列表systemctl list-units --type=mount
。