Supervisor: Повний гайд по управлінню процесами
Що таке Supervisor?
Supervisor – (диспетчер процесів Linux) це система контролю процесів для Unix-подібних операційних систем. Він дозволяє:
- Автоматично запускати процеси
- Перезапускати їх у разі падіння
- Контролювати їх стан
- Керувати логами
- Забезпечувати автозапуск при перезавантаженні сервера
Навіщо використовувати Supervisor?
- Надійність
- Автоматичний перезапуск процесів при збоях
- Гарантія роботи важливих сервісів
- Відновлення після помилок
- Моніторинг
- Перегляд статусу процесів
- Доступ до логів
- Сповіщення про проблеми
- Зручність
- Централізоване управління процесами
- Простий інтерфейс командного рядка
- Web-інтерфейс для моніторингу
Встановлення
Ubuntu/Debian:
|
1 2 |
sudo apt-get update sudo apt-get install supervisor |
CentOS:
|
1 |
sudo yum install supervisor |
Базова конфігурація
1. Структура конфігураційних файлів:
|
1 2 3 4 5 6 |
/etc/supervisor/ ├── supervisord.conf # Головний конфіг └── conf.d/ # Директорія для окремих конфігів ├── laravel-worker.conf ├── laravel-queue.conf └── telegram-bot.conf |
2. Приклад конфігурації для Laravel Schedule:
|
1 2 3 4 5 6 7 8 9 10 |
[program:laravel-scheduler] process_name=%(program_name)s_%(process_num)02d command=/usr/bin/php /path/to/artisan schedule:run directory=/path/to/your/project user=www-data numprocs=1 autostart=true autorestart=true redirect_stderr=true stdout_logfile=/var/log/supervisor/scheduler.log |
3. Конфігурація для Laravel Queue:
|
1 2 3 4 5 6 7 8 9 10 |
[program:laravel-queue] process_name=%(program_name)s_%(process_num)02d command=php /path/to/artisan queue:work --sleep=3 --tries=3 directory=/path/to/your/project user=www-data numprocs=2 autostart=true autorestart=true redirect_stderr=true stdout_logfile=/var/log/supervisor/queue.log |
4. Конфігурація для Telegram бота:
|
1 2 3 4 5 6 7 8 9 10 11 |
[program:telegram-bot] process_name=%(program_name)s_%(process_num)02d command=php /path/to/artisan telegram:bot directory=/path/to/your/project user=www-data numprocs=1 autostart=true autorestart=true redirect_stderr=true stdout_logfile=/var/log/supervisor/telegram.log stopwaitsecs=3600 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Перезавантаження конфігурації sudo supervisorctl reread sudo supervisorctl update # Керування всіма процесами sudo supervisorctl start all sudo supervisorctl stop all sudo supervisorctl restart all # Керування окремим процесом sudo supervisorctl start laravel-scheduler:* sudo supervisorctl stop laravel-scheduler:* sudo supervisorctl restart laravel-scheduler:* # Перегляд статусу sudo supervisorctl status # Перегляд логів sudo supervisorctl tail laravel-scheduler |
Найкращі практики
1. Іменування процесів
|
1 2 |
[program:app-name-service-type] process_name=%(program_name)s_%(process_num)02d |
2. Логування
|
1 2 3 4 5 |
[program:your-program] stdout_logfile=/var/log/supervisor/%(program_name)s.log stderr_logfile=/var/log/supervisor/%(program_name)s.error.log stdout_logfile_maxbytes=50MB stdout_logfile_backups=10 |
3. Обробка помилок
|
1 2 3 4 |
[program:your-program] startretries=3 stopwaitsecs=10 stopsignal=QUIT |
4. Моніторинг пам’яті
|
1 2 3 |
[program:your-program] minfds=1024 minprocs=200 |
Інтеграція з Laravel
1. Створення команди для моніторингу:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
namespace App\Console\Commands; use Illuminate\Console\Command; class SupervisorStatusCommand extends Command { protected $signature = 'supervisor:status'; public function handle() { $output = shell_exec('supervisorctl status'); $this->info($output); return 0; } } |
2. Налаштування сповіщень:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public function handle() { try { // Ваш код } catch (\Exception $e) { Log::error('Process failed', [ 'error' => $e->getMessage(), 'process' => $this->signature ]); // Сповіщення в Slack/Email Notification::route('slack', 'webhook-url') ->notify(new ProcessFailedNotification($e)); return 1; } } |
Безпека
- Обмеження користувача
|
1 2 |
[program:your-program] user=www-data |
2. Обмеження ресурсів:
|
1 2 3 |
[program:your-program] umask=022 priority=999 |
3. Налаштування прав доступу:
|
1 2 3 |
sudo chown -R root:root /etc/supervisor/ sudo chmod -R 644 /etc/supervisor/ sudo chmod -R 755 /var/log/supervisor/ |
Моніторинг
- Налаштування подій:
|
1 2 3 |
[eventlistener:memmon] command=memmon -p your-program=200MB events=TICK_60 |
2. Web-інтерфейс:
|
1 2 3 4 |
[inet_http_server] port=9001 username=admin password=your_password |
Типові проблеми та їх вирішення
- Процес не запускається:
|
1 2 |
# Перевірка логів sudo tail -f /var/log/supervisor/supervisord.log |
2. Процес постійно перезапускається:
|
1 2 3 4 |
[program:your-program] startretries=3 autorestart=unexpected exitcodes=0 |
3. Проблеми з правами:
|
1 |
sudo chown -R www-data:www-data /path/to/your/project |
Висновок
Supervisor – це потужний інструмент для управління процесами, який значно спрощує адміністрування веб-додатків. Правильне налаштування Supervisor забезпечує надійну роботу всіх компонентів вашого додатку та спрощує їх моніторинг та обслуговування.