Вопрос или проблема
Я пытаюсь запустить службу systemd во время загрузки, как только монтируются записи fstab.
Я следовал указаниям по установке службы systemd для выполнения после монтирования fstab и добавил следующие детали
# cat /etc/fstab
/dev/mmcblk1p11 /data ext4 defaults 0 2
# systemctl list-units | grep '/data' | awk '{ print $1 }'
data.mount
# cat /usr/lib/systemd/system/data.service
[Unit]
Description=Моя система
After=data.mount
[Service]
Type=oneshot
ExecStartPre=mountpoint -q /data
ExecStart=/usr/etc/data.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Проблема в том, что она не запускается во время загрузки. Однако ручной перезапуск выглядит рабочим.
# systemctl status data.service
data.service - Моя система
Loaded: loaded (/usr/lib/systemd/system/data.service; disabled; vendor preset: enabled)
Active: inactive (dead)
# systemctl enable data.service
Создан символьная ссылка /etc/systemd/system/multi-user.target.wants/data.service → /usr/lib/systemd/system/data.service.
# systemctl restart data.service
Запуск Моя система...
[ OK ] Запущена Моя система.
Я что-то упустил?
Две вещи, которые я бы попробовал.
Вы сказали, что ручной запуск работал, но в вашем примере вы показываете
systemctl enable data.service
Вы выполнили команду включения перед тем, как перезапустить? Она должна быть включена, чтобы запускаться при загрузке.
Во-вторых, я думаю, что строка After= должна быть именем службы.
Попробуйте изменить
After=data.mount
на
After=data.service
и посмотрите, что произойдет.
Ответ или решение
Ошибки в процессе запуска системной службы systemd во время загрузки могут создавать множество проблем. Вы описали ситуацию, в которой служба не запускается автоматически при загрузке системы, хотя вручную запуск работает корректно. Давайте разберемся с вашей проблемой.
1. Проверка статуса службы
Вы представили вывод команды systemctl status data.service
, который показывает, что служба загружена, но неактивна (inactive (dead)). Это указывает на то, что служба не была успешно активирована при загрузке.
2. Включение службы
Вы упоминаете, что выполнили команду systemctl enable data.service
, но важно удостовериться, что эта команда была выполнена до перезагрузки системы. Если команда была выполнена после загрузки, изменения не вступят в силу до следующей загрузки. Убедитесь, что вы проверили символическую ссылку в каталоге /etc/systemd/system/multi-user.target.wants/
, чтобы подтвердить, что ваш сервис действительно подключен для автоматического запуска.
3. Порядок запуска
Вы правильно указали After=data.mount
. Эта строка указывает, что ваша служба должна начать работу только после того, как точка монтирования /data
будет доступна. Однако, если вы измените ее на After=data.service
, сервис может не стартовать, так как data.service
не может быть запущена до монтирования /data
.
4. Ошибки служб
Чтобы лучше понять, почему служба не запускается автоматически, вам следует проверить журналы сервиса. Используйте следующую команду:
journalctl -u data.service
Это даст вам возможность просмотреть все ошибки и предупреждения, связанные с вашей службой, и может помочь в диагностике проблем.
5. Состояние mount-единицы
Вы можете также проверить статус единицы монтирования (mount unit) с помощью:
systemctl status data.mount
Убедитесь, что точка монтирования /data
успешно монтируется во время загрузки. Если возникает ошибка при монтировании, ваша служба не сможет стартовать.
6. Изменения в конфигурации
Если вы внесли изменения в data.service
, убедитесь, что вы перезагрузили конфигурацию systemd с помощью:
systemctl daemon-reload
Это необходимо для применения всех изменений, которые были выполнены.
Заключение
Для успешного разрешения проблемы с запуском службы data.service
во время загрузки:
- Убедитесь, что служба правильно включена для автоматического запуска.
- Убедитесь, что
After=data.mount
остаётся в конфигурации. - Проверьте журналы служб и статусы монтирования, чтобы выявить возможные причины проблем.
- Перезагрузите конфигурацию systemd после внесения изменений.
Следуя этим шагам, вы повысите вероятность успешного запуска вашей службы при загрузке.