Не удалось загрузить файлы модулей, связанных systemd на смонтированном диске

С awk не уверен, будет ли он работать на Cygwin

$ awk '{ if(/^alt_id/){$0 = $0" "p} else{p = ""; for (i=2; i<=NF; i++) p = p" "$i} } 1' ip.txt
GO:0000001      mitochondrion inheritance
GO:0000002      mitochondrial genome maintenance
GO:0000003      reproduction
alt_id: GO:0019952  reproduction
alt_id: GO:0050876  reproduction
GO:0000005      obsolete ribosomal chaperone activity
GO:0000006      high-affinity zinc uptake transmembrane transporter activity
GO:0000007      low-affinity zinc ion transmembrane transporter activity
GO:0000008      obsolete thioredoxin
alt_id: GO:0000013  obsolete thioredoxin
GO:0000009      alpha-1,6-mannosyltransferase activity
  • Для каждой строки, не соответствующей alt_id в начале строки, используйте переменную ( p ), чтобы сохранить все столбцы, начиная с двух.
  • Когда строка совпадает с alt_id в начале строки, добавьте содержимое p в строку ввода, содержащуюся в $ 0 переменная
  • Последний 1 - это ярлык для печати содержимого $ 0
8
21.06.2016, 11:39
2 ответа

Как объяснил @StephenHarris, проблема заключается в том, что в тот момент, когда systemd пытается прочитать модуль, файл с символической ссылкой еще недоступен


Чтобы systemd просто перезагрузил юниты после монтирования:

[Unit]
Description=reloads units stored in /mnt/data
DefaultDependencies=no
After=mnt-data.mount
Requires=mnt-data.mount

[Service]
Type=oneshot
ExecStart=/bin/systemctl daemon-reload

[Install]
WantedBy=local-fs.target

Это приведет к тому, что юниты станут доступными, потому что на этот раз на этот раз цель символических ссылок смонтирована.

Но к тому времени список заданий, которые необходимо выполнить для достижения default.target , уже сформирован,и служба не будет запущена.


Чтобы он также перезапустил вашу службу:

[Unit]
Description=restart unit stored in /mnt/data
Requires=mnt-data.mount

[Service]
Type=oneshot
ExecStart=/bin/systemctl daemon-reload
ExecStartPost=/bin/systemctl start sprinterd.service

[Install]
WantedBy=multi-user.target

Альтернативы:

  • Я тестировал с ExecStart=и ExecStartPost=, но он, очевидно, должен работать с ExecStartPre=иExecStart=
  • если речь идет об одном юните, то можно и :ExecStart=/bin/systemctl enable /mnt/data/sprinterd.serviceвместо демон -перезагрузка
  • если имеется несколько служб, выполните демон -перезагрузку , затем запустите один модуль, который использует ConsistsOf=или PartOf=для загрузки всех нескольких служб.
  • Если его NFS (или другая сетевая система ), конечно, local-fs.targetне лучший вариант установки для вас.

Для более старой -школы подхода в стиле SysVinit-поместите команды systemctl внутрь /etc/rc.localи chmod +xэтого файла.

А затем тайно опубликуйте в списке рассылки Devuan, как вам понадобился SysVInit для исправления b0rked SystemD;-)

3
27.01.2020, 20:13

Это известное ограничение . Жаль, что у меня не было обходного пути для вас.

2
27.01.2020, 20:13

Теги

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