Запустить скрипт после fstab

В Ubuntu Linux 16.04.3, как мне запустить сценарий, в зависимости от того, какой другой жесткий диск монтируется первым, после fstab?

Я попытался:

Создание службы скрипт в /etc/init.d, но скрипт выполняется перед fstab. Добавление в /etc/rc.local, но та же проблема.
3
задан 11 September 2017 в 02:38

3 ответа

Я считаю, что вам нужно будет использовать более новую услугу systemd на Ubuntu 16.04, а не на /etc/init.d. Здесь вы создадите служебный файл для запуска вашего скрипта после local-fs.target.

позвольте представить вам пример того, как это будет сделано.

Создайте необходимый файл service в каталоге /etc/systemd/system. Файл будет выглядеть следующим образом:
[Install]
Description=Script to run after fstab
After=local-fs.target

[Service]
Type=simple        
ExecStart=/bin/bash -c "/script/to/run.sh"


[Install]
WantedBy=multiuser.target 
И, конечно же, вы настроите службу с помощью:
sudo systemctl start <name_of_service>
sudo systemctl enable <name_of_service>

. Как это можно сделать, пожалуйста, я сам не тестировал его, и вот ссылка на документацию, чтобы помочь вам , Посмотрите другие параметры, доступные для различных полей в файле службы.

https://access.redhat.com/articles/754933

https: // access .redhat.com / articles / 754933

https://www.freedesktop.org/software/systemd/man/systemd.html#

Обратите внимание: что noauto параметр fstab mount здесь https://www.freedesktop.org/software/systemd/man/systemd.html#

 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 не совсем уверенными, поскольку последний охватывает все файловые системы. Таким образом, вы решаете фазу, когда ваш скрипт будет работать, чтобы дать вам желаемый эффект.

5
ответ дан 22 May 2018 в 18:35
  • 1
    Спасибо за ответ и, кажется, прямо понимаем. Я попробую завтра (когда я проснусь), тогда пометить как принятый ответ, если все пойдет хорошо. – charlie 11 September 2017 в 03:58
  • 2
    Выглядит хорошо @george Хотя это будет возможно и с использованием более старого метода. «в зависимости от того, какой другой жесткий диск установлен первым», Это можно сделать и с правилом udev. – Rinzwind 13 September 2017 в 11:26
  • 3
    Это не сработало для меня из коробки. Верхний раздел [Install] следует называть [Unit], который содержит After = specification . Также я обнаружил, что часть /bin/bash -c не нужна в ExecStart. Также для знания simple эффективно запускает процесс в фоновом режиме – darkwing 26 January 2018 в 22:11

Я считаю, что вам нужно будет использовать более новую услугу 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=multiuser.target И, конечно же, вы настроите службу с помощью: sudo systemctl start <name_of_service> sudo systemctl enable <name_of_service>

. Как это можно сделать, пожалуйста, я сам не тестировал его, и вот ссылка на документацию, чтобы помочь вам , Посмотрите другие параметры, доступные для различных полей в файле службы.

https://access.redhat.com/articles/754933

https: // access .redhat.com / articles / 754933

https://www.freedesktop.org/software/systemd/man/systemd.html#

Обратите внимание: что noauto параметр fstab mount здесь https://www.freedesktop.org/software/systemd/man/systemd.html#

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 не совсем уверенными, поскольку последний охватывает все файловые системы. Таким образом, вы решаете фазу, когда ваш скрипт будет работать, чтобы дать вам желаемый эффект.

8
ответ дан 18 July 2018 в 07:04

Я считаю, что вам нужно будет использовать более новую услугу 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=multiuser.target И, конечно же, вы настроите службу с помощью: sudo systemctl start <name_of_service> sudo systemctl enable <name_of_service>

. Как это можно сделать, пожалуйста, я сам не тестировал его, и вот ссылка на документацию, чтобы помочь вам , Посмотрите другие параметры, доступные для различных полей в файле службы.

https://access.redhat.com/articles/754933

https: // access .redhat.com / articles / 754933

https://www.freedesktop.org/software/systemd/man/systemd.html#

Обратите внимание: что noauto параметр fstab mount здесь https://www.freedesktop.org/software/systemd/man/systemd.html#

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 не совсем уверенными, поскольку последний охватывает все файловые системы. Таким образом, вы решаете фазу, когда ваш скрипт будет работать, чтобы дать вам желаемый эффект.

8
ответ дан 24 July 2018 в 18:44

Другие вопросы по тегам:

Похожие вопросы: