Вопрос или проблема
Вот скрипт:
#!/bin/bash
setterm --blank 1 --powerdown 2
Вот сервис:
[Unit]
Description=Затемнить экран через 1 минуту и выключить его через 2 минуты. Любая клавиша включит его обратно.
After=ssh.service
[Service]
Type=oneshot
Environment=TERM=linux
StandardOutput=tty
TTYPath=/dev/console
ExecStart=/home/USER/.boot-scripts/screen-off.sh
[Install]
WantedBy=local.target
Если я включаю его и запускаю, он работает, но когда я перезагружаю сервер, ничего не происходит. Если я проверяю статус сервиса, то получаю следующее:
● screen-off.service - Затемнить экран через 1 минуту и выключить его через 2 минуты. Любая клавиша включит его обратно.
Loaded: loaded (/etc/systemd/system/screen-off.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Какие идеи, почему он не запускается при загрузке и мне приходится делать это вручную?
Спасибо
Спасибо за помощь – user535733 (комментарий по ошибке был удален). local.target не является обычной целью systemd в загрузочном пути системы Ubuntu. Я переместил его в multi-user.target, и теперь он работает!
Ответ или решение
Понимание проблемы службы systemd: неактивное состояние после перезагрузки
Фон
В данном случае мы имеем дело с службой systemd, создаваемой для управления поведением вывода на экран. Скрипт, выполняемый службой, отвечает за затемнение экрана через одну минуту и его отключение через две минуты бездействия. Несмотря на то что служба работает правильно при ручном запуске, она не активируется автоматически при загрузке системы, о чем свидетельствует статус "inactive (dead)".
Основные компоненты
-
Скрипт:
#!/bin/bash setterm --blank 1 --powerdown 2
Этот скрипт использует команду
setterm
, чтобы задать параметры затемнения и отключения монитора. Он работает на терминале Linux и использует возможности встроенной оболочки для управления выводом на экран. -
Юнит службы:
[Unit] Description=Blank screen after 1 min and turn it off after 2 min. Any keypress will turn it back on. After=ssh.service [Service] Type=oneshot Environment=TERM=linux StandardOutput=tty TTYPath=/dev/console ExecStart=/home/USER/.boot-scripts/screen-off.sh [Install] WantedBy=local.target
В юните описаны различные параметры, включая тип службы, среду и путь к TTY. Однако существует важный момент: секция
[Install]
, где указано, что служба должна запускаться сlocal.target
.
Причины проблемы
На основании предоставленной информации и вашего описания, причины, по которым служба не активируется при загрузке, могут быть следующими:
-
Неправильный таргет для автоматического запуска:
Прошу прощения за путаницу, упомянутую в комментарии, –local.target
не является стандартным таргетом в большинстве дистрибутивов Linux для автостарт служб, особенно в Ubuntu. Вместо этого рекомендуется использоватьmulti-user.target
, который является более подходящим для запуска фоновых процессов и пользовательских служб. -
Тип службы:
Типoneshot
предполагает, что служба выполняется и завершается. Если она не успевает выполнить свою задачу должным образом в момент загрузки, это может привести к тому, что она будет отмечена как "неактивная". Поскольку служба зависит отssh.service
, важно, чтобы SSH-сервис был активен до запуска службыscreen-off
.
Решение проблемы
Чтобы исправить проблему, измените WantedBy
на более подходящий таргет. Измените файл юнита следующим образом:
[Install]
WantedBy=multi-user.target
После внесения изменений, выполните следующие команды:
sudo systemctl daemon-reload
sudo systemctl enable screen-off.service
Это обновит состояние меню и позволит правильно инициализировать вашу службу в нужном таргете.
Заключение
Теперь при следующей загрузке вашей системы служба должна автоматически активироваться, и экран будет затемнен через заданные интервалы. В случае любых дальнейших вопросов или возникновений других проблем, всегда полезно проверять журналы с помощью команды journalctl -xe
, чтобы получать информацию о состоянии служб и решать возникающие проблемы.