Как создать интерактивный скрипт с использованием команды read, который будет запускаться при старте системы на Debian?

Как можно запустить скрипт при старте системы, если rc.local не подходит из-за команды read, а bashrc не справляется, так как требуется выполнение до входа в систему?
  • 4 февраля 2025 г. 12:54
Ответы на вопрос 3
Для создания интерактивного скрипта, который будет запускаться при старте системы на Debian, вам может понадобиться использовать systemd. Из-за команды `read` в вашем скрипте - это требует взаимодействия с пользователем, поэтому вам нужно будет настроить запуск этого скрипта в терминальном сеансе.

Вот шаги, которые вам позволят реализовать вашу задачу:

### 1. Создайте скрипт

Сначала создайте ваш интерактивный скрипт, например, `/usr/local/bin/my_interactive_script.sh`:

```bash
#!/bin/bash

echo "Введите ваше имя:"
read name
echo "Привет, $name!"
```

Не забудьте сделать его исполняемым:

```bash
sudo chmod +x /usr/local/bin/my_interactive_script.sh
```

### 2. Создайте systemd сервис

Создайте файл для вашего сервиса в каталоге `/etc/systemd/system/`. Например, `my_interactive_script.service`:

```bash
sudo nano /etc/systemd/system/my_interactive_script.service
```

Добавьте следующее содержимое в файл:

```
[Unit]
Description=My Interactive Script

[Service]
ExecStart=/usr/local/bin/my_interactive_script.sh
StandardInput=tty
TTYPath=/dev/tty1
User=root

[Install]
WantedBy=multi-user.target
```

### 3. Настройте TTY

Убедитесь, что вы указываете правильный TTY, на котором будет запрашиваться ввод. В примере выше используется `/dev/tty1`.

### 4. Включите и запустите сервис

После создания файла сервиса выполните следующие команды:

```bash
sudo systemctl daemon-reload
sudo systemctl enable my_interactive_script.service
```

### 5. Перезагрузите систему

Теперь ваш скрипт будет запускаться при старте системы. Перезагрузите систему и проверьте, работает ли ваш интерактивный скрипт.

### Важно

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

Этот подход может быть полезен в определенных сценариях, но рекомендуется тщательно продумать необходимость интерактивного скрипта на этапе загрузки системы. Одно из решений - делать ввод данных при первом входе в систему, используя `bashrc` или другие конфигурации пользовательского окружения.
Либо загрузчик, либо грейтер. Во время загрузки нет интерактива.
в read можно добавить timeout, и если никто в течение указанного времени ничего не ввел, он пойдет дальше с пустым значением. 
Проверяешь значение, если пустое, ставишь какое-то по умолчанию
Похожие вопросы