docs: detailed systemd unit for act_runner
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+119
-3
@@ -159,7 +159,7 @@ cd ~/gitea-act-runner
|
||||
|
||||
Если Gitea пишет ошибку регистрации — часто неверный **токен** (устарел после «сброса» в UI) или выбран не тот уровень (инстанс/организация/репозиторий). Создай раннера заново и возьми **новый** токен.
|
||||
|
||||
### Шаг D — запуск
|
||||
### Шаг D — запуск вручную (для проверки)
|
||||
|
||||
В той же папке:
|
||||
|
||||
@@ -167,9 +167,125 @@ cd ~/gitea-act-runner
|
||||
./act_runner daemon
|
||||
```
|
||||
|
||||
Окно терминала должно остаться **открытым**. Остановка — `Ctrl+C`.
|
||||
Окно терминала должно остаться **открытым**. Остановка — `Ctrl+C`. Когда убедишься, что в Gitea раннер **online**, лучше перейти на **systemd** (шаг ниже).
|
||||
|
||||
Чтобы раннер жил после перезагрузки, оформи **systemd** по [официальной инструкции](https://docs.gitea.com/usage/actions/act-runner#start-the-runner-with-systemd) (пути к бинарнику и рабочей директории подставь свои, например `/home/USER/gitea-act-runner`).
|
||||
### Шаг D1 — systemd: автозапуск после перезагрузки (подробно)
|
||||
|
||||
Идея: **systemd** сам поднимает `act_runner daemon` при загрузке системы и перезапускает процесс при падении. Рабочая директория должна быть **та же**, где лежат **`act_runner`** и зарегистрированный файл **`.runner`** (обычно `~/gitea-act-runner`).
|
||||
|
||||
#### 0) Подготовка
|
||||
|
||||
1. Регистрация (**шаг C**) уже выполнена, в каталоге есть **`.runner`**.
|
||||
2. Узнай **точный путь** к каталогу (systemd не понимает `~`):
|
||||
|
||||
```bash
|
||||
cd ~/gitea-act-runner && pwd
|
||||
```
|
||||
|
||||
Запомни вывод, например **`/home/ivan/gitea-act-runner`**. Имя пользователя Linux:
|
||||
|
||||
```bash
|
||||
whoami
|
||||
```
|
||||
|
||||
Дальше в примерах: **`/home/ivan/gitea-act-runner`** и пользователь **`ivan`** — замени на свои.
|
||||
|
||||
#### 1) Останови ручной запуск
|
||||
|
||||
Если где-то в терминале уже крутится `./act_runner daemon` — заверши **Ctrl+C**, иначе два процесса будут мешать друг другу.
|
||||
|
||||
#### 2) Создай unit-файл службы
|
||||
|
||||
На **VPS / обычной Ubuntu** с правами root:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/systemd/system/gitea-act-runner.service
|
||||
```
|
||||
|
||||
Вставь текст **целиком** (подставь свои `User`, `Group`, `WorkingDirectory`, `ExecStart`):
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=Gitea Actions act_runner
|
||||
Documentation=https://docs.gitea.com/usage/actions/act-runner
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=ivan
|
||||
Group=ivan
|
||||
WorkingDirectory=/home/ivan/gitea-act-runner
|
||||
ExecStart=/home/ivan/gitea-act-runner/act_runner daemon
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
|
||||
# Логи в journald (см. ниже как читать)
|
||||
StandardOutput=journal
|
||||
StandardError=journal
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
Сохрани файл: в **nano** — **Ctrl+O**, Enter, **Ctrl+X**.
|
||||
|
||||
Пояснения:
|
||||
|
||||
- **`User` / `Group`** — под этим пользователем ты делал `register` и владеешь папкой (проверка: `ls -la ~/gitea-act-runner` — владелец должен совпадать).
|
||||
- **`WorkingDirectory`** — каталог с **`.runner`**; без него раннер может не найти регистрацию.
|
||||
- **`ExecStart`** — полный путь к бинарнику **`act_runner`** (тот, что скачал и сделал `chmod +x`).
|
||||
- Блок **`After=network-online.target`** — старт после сети (удобно для `git`/`npm` в CI). Если вдруг зависнет старт из‑за сетевого таргета, можно временно заменить на **`After=network.target`**.
|
||||
|
||||
Официальный пример с отдельным пользователем `act_runner` и `config.yaml`: [Start the runner with Systemd](https://docs.gitea.com/usage/actions/act-runner#start-the-runner-with-systemd) — у нас проще: один пользователь и без отдельного `config.yaml`, пока дефолты устраивают.
|
||||
|
||||
#### 3) Включи и запусти службу
|
||||
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable gitea-act-runner.service
|
||||
sudo systemctl start gitea-act-runner.service
|
||||
sudo systemctl status gitea-act-runner.service
|
||||
```
|
||||
|
||||
В **`status`** должно быть **`active (running)`** зелёным. Если **`failed`** — смотри лог (шаг 5).
|
||||
|
||||
Полезные команды:
|
||||
|
||||
| Действие | Команда |
|
||||
| --------------------- | ------------------------------------------------------------- |
|
||||
| Остановить | `sudo systemctl stop gitea-act-runner` |
|
||||
| Запустить снова | `sudo systemctl start gitea-act-runner` |
|
||||
| Перезапуск | `sudo systemctl restart gitea-act-runner` |
|
||||
| Выключить автозапуск | `sudo systemctl disable gitea-act-runner` |
|
||||
| Проверка после ребута | перезагрузи машину, затем `systemctl status gitea-act-runner` |
|
||||
|
||||
#### 4) Проверка в Gitea
|
||||
|
||||
Как в **шаге E**: раннер снова **online** (иногда 10–30 секунд после `start`).
|
||||
|
||||
#### 5) Логи, если что-то не так
|
||||
|
||||
```bash
|
||||
sudo journalctl -u gitea-act-runner -e --no-pager
|
||||
```
|
||||
|
||||
В реальном времени:
|
||||
|
||||
```bash
|
||||
sudo journalctl -u gitea-act-runner -f
|
||||
```
|
||||
|
||||
Типичные ошибки: неверный **`User`** (нет прав на каталог), **`WorkingDirectory`** не тот (нет **`.runner`**), бинарник не исполняемый (`chmod +x`), или старый процесс `act_runner` ещё запущен вручную.
|
||||
|
||||
#### WSL2 (Ubuntu в Windows)
|
||||
|
||||
Если раннер стоит **внутри WSL2**:
|
||||
|
||||
1. На современных WSL **systemd уже может быть включён**. Проверка: `systemctl status` — без ошибки «running in chroot».
|
||||
2. Если `systemctl` недоступен: в файле **`/etc/wsl.conf`** внутри дистрибутива добавь блок **`[boot]`** с **`systemd=true`**, затем из **PowerShell** Windows выполни **`wsl --shutdown`**, снова зайди в Ubuntu и повтори шаги 2–3. Подробнее: [документация Microsoft про systemd в WSL](https://learn.microsoft.com/en-us/windows/wsl/systemd).
|
||||
|
||||
После **`wsl --shutdown`** раннер на WSL не работает, пока ты снова не откроешь WSL (это нормально для «домашнего» CI).
|
||||
|
||||
### Шаг E — проверка в веб-интерфейсе
|
||||
|
||||
|
||||
Reference in New Issue
Block a user