LINUX.ORG.RU

systemd юнит, чтобы отработал только 1 раз на следующей загрузке

В тело юнита последней строкой пишите rm... ну вы поняли.

anc ★★★★★
()

Опиши задачу более полно, может, предложат более другие решения. Очевидно, что если не смонтирован /, то даже забавное решение с systemctl disable не сработает, поскольку твой юнит в initrd (верно?). Плюс ExecStop требует корректного завершения работы, а это сложно гарантировать.

Как вариант, в исходной формулировке, какой-то триггер на пересоздание initrd, скрипт для dracut/initramfs-tools с нужными условиями и маркер на диске.

anonymous
()
Ответ на: комментарий от NyXzOr

каждый раз при загрузке же. здесь, как я понял, используется сценарий:

  1. включить юнит

  2. юнит срабатывает при следующем включении

  3. больше юнит не сработает, если не включить его снова (пункт 1)

peajack
()
Ответ на: комментарий от anonymous

хочу e2image прогнать при загрузке на все носители, сохранить в /tmp

выход от 14 тб винта, например, - 1.5гб

ЗЫ как потом забрать из /tmp (когда / поверх подмаунтится) еще не подумал :)

ЗЗЫ хотя может просто в cmdline руками, когда надо, параметр дописывать в грабе…

baja
() автор топика
Последнее исправление: baja (всего исправлений: 3)
Ответ на: комментарий от baja

Я бы добавил какой-то накопитель (хоть USB-флэшку), в юните сделал монтирование, вызовы e2image, отмонтирование. Вероятно, будет работать и ConditionPathExists= на файл этого дополнительного диска в /dev/disk/.

как потом забрать из /tmp (когда / поверх подмаунтится) еще не подумал :)

Помимо описанного выше варианта это мо-о-о-жет быть какой-то трюк с /dev/shm, но я сильно сомневаюсь.

anonymous
()
Ответ на: комментарий от baja

хотя может просто в cmdline руками, когда надо, параметр дописывать в грабе

Можно даже добавить генератор отдельной записи с нужным параметром. Кстати…

когда / поверх подмаунтится

…оно не поверх, а через pivot_root(2). Проще от этого, однако, не становится.

anonymous
()
Ответ на: комментарий от anonymous

вот тут оно как-то сохраняет доступ после пивота, видимо надо сюда смотреть:

$ sudo ls -la /run/initramfs/
total 4
drwx------  2 root root   80 июл  3 12:06 .
drwxr-xr-x 48 root root 1320 июл  5 18:31 ..
-rw-r--r--  1 root root    0 июл  3 12:06 fsck-root
-rw-r--r--  1 root root  346 июл  3 12:06 fsck.log
baja
() автор топика
Ответ на: комментарий от peajack

больше юнит не сработает, если не включить его снова (пункт 1)

Или если просто отключить его до перезагрузки. Понятно, что хочется автоматизировать.

Что-то типа самоуничтожающегося юнита

https://unix.stackexchange.com/questions/527289/systemd-disable-and-reboot-after-oneshot-is-completed

NyXzOr ★★★★★
()
Последнее исправление: NyXzOr (всего исправлений: 2)
Ответ на: комментарий от GAMer

«случаи разные бывают» (с) анекдот

а несколько раз по 2 гб мне не жалко

ЗЫ У меня еще и ls -laR каждую неделю по крону делается, вот такой я странный

baja
() автор топика
Последнее исправление: baja (всего исправлений: 1)

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

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 1)
Ответ на: комментарий от baja

ты хочешь сделать образ системного раздела в конститентном состоянии, и сделать это во время старта системы до его перемонтирования в rw ??
до «перемонтирования в rw» мое видение такого решения, чтобы ничего там случайно не было обрублено во время записи.
и сколь помню скрипты initrd это происходит задолго до старта systemd. т.е. юнит системд тебе не поможет, на этот момент системный раздел уже в режиме rw и на него возможно что-то записывается. надо вписываться в скрипты инитрд.

вообще мысль интересная - надо будет покумекать.
описание т.з. конечно на уровне плинтуса… :)

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)