fstab 之后运行脚本

fstab 之后运行脚本

在 Ubuntu Linux 16.04.3 中,如何在 fstab 之后运行依赖于首先安装的另一个硬盘的脚本?

我努力了:

  • 在 /etc/init.d 中创建服务脚本,但该脚本在 fstab 之前执行。
  • 添加到 /etc/rc.local,但问题相同。

答案1

我相信您需要systemd在 Ubuntu 16.04 上使用较新的服务,而不是/etc/init.d。在这里,您将创建一个服务文件以在之后运行您的脚本local-fs.target

让我向你展示一个如何实现这一目标的示例。

  1. service/etc/systemd/system目录中创建所需文件

  2. 该文件看起来如下:

    [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 
    
  3. 当然,你可以使用以下命令设置服务:

    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#

注意:noautofstab 挂载选项在这里很重要

 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

相关内容