Процессорларды басқару үшін Linux жүйесінде systemd сияқты инициализация жүйелері бар. Егер сізге қарапайым шешім қажет болса, жүйедегі немесе Docker контейнеріндегі қолданбаңыздың процестерін басқара алатын бағдарлама. Мұндай бағдарлама бар - ол супервайзер. Python тілінде жазылған функционалды қарапайым ашық бастапқы процесс менеджері, оның көмегімен процестің қажетті көшірме санын іске қосуға және олардың күйін бақылауға болады. Әрі қарай, мысал ретінде Ubuntu 20.04 арқылы Supervisor орнату және конфигурациялау жолын айтамыз.
Бағдарламаны алудың ең оңай жолы - оны ресми репозиторийлерден орнату. Ол үшін пәрменді орындау керек:
$ sudo apt install supervisor
Бағдарламаның тұрақты жұмыс істеуін қаласаңыз, оны іске қосуға қосып, іске қосу керек. Жүгіру:
$ sudo systemctl enable supervisor --now
Содан кейін пәрмен арқылы күйді көруге болады:
$ sudo systemctl status supervisor
Конфигурация файлы /etc/supervisor/supervisord.conf.
Мұнда негізгі параметрлер берілген. Іске қосылған процестерді конфигурациялау үшін /etc/supervisor/conf.d/.
Негізгі конфигурация файлын әдепкі ретінде қалдыруға болады. Бағдарламалар үшін конфигурация файлдарын қалай жасау керектігін қарастырайық. Бір процеске арналған бөлім синтаксисі келесідей көрінеді:
variable name value
Әрбір процесс автоматты түрде іске қосылуы және бұзылудан кейін қалпына келуі үшін келесі айнымалы мәндерді беру өте аз қажет:
directory
- жұмыс анықтамалығы;command
- процесті бастау командасы;user
- оның атынан процесс іске қосылатын пайдаланушы;autostart
- процесті автоматты түрде бастау қажет пе;autorestart
- процесті қайта бастау қажет пе;Дегенмен, көптеген басқа параметрлер бар, міне, осы мақалада талқыланатындардың кейбірі:
priority
- іске қосылатын процестің басымдылығы;environment
- процеске берілуі қажет орта айнымалылары;stdout_logfile
- процестің stdout шығысын қайда бағыттау керек;stderr_logfile
- процестің stderr шығысын қайда бағыттау керек;process_name
- көшірме нөмірін ауыстыру мүмкіндігі бар процестің атауы;numprocs
- процестің іске қосылған көшірмелерінің саны;startretries
- бағдарламаны іске қосу әрекеттерінің саны;redirect_stderr
- процесс қатесінің шығысын супервайзер шығысына қайта бағыттау;redirect_stdout
- процестің шығысын супервайзерлік шығысқа қайта бағыттау.Жақсырақ түсіну және мысал үшін PHP-де фонда ілулі тұратын сценарийді іске қосайық:
$ sudo vi /home/sergiy/program/process.php <?php echo "Started..."; while(true){ sleep(5); }
Процесс үшін жеке бақылаушы конфигурация файлын жасауға болады. Конфигурацияны тікелей негізгі конфигурация файлының соңына енгізуге болады, бірақ мұны жасамағаныңыз жөн. Әр бағдарлама үшін /etc/supervisor/conf.d/
каталогында *.conf атымен жеке конфигурация файлын жасаған дұрыс. Мысалы, бұл бағдарлама үшін бұл файл келесідей болады:
$ sudo vi /etc/supervisor/conf.d/process.conf [program:process] directory=/home/sergiy/program/ command=/usr/bin/php process.php user=sergiy autostart=true autorestart=true
Содан кейін супервайзерді қайта іске қосу керек, мұны systemctl арқылы жасауға болады:
$ sudo systemctl restart supervisor
Немесе supervisorctl
утилитасын пайдалану:
$ sudo supervisorctl reload
Сондай-ақ, пәрменді пайдаланып конфигурацияланған процестердің күйін көруге болады:
Егер процесс ОРЫНДАУ күйінде болса, мұның бәрі жақсы және ол сәтті іске қосылды. Бірақ бұл жағдайда процесс бір данада іске қосылады және жиі бірдей процестің бірнеше көшірмелерін іске қосу қажет. Ол үшін process_name
және numprocs
параметрлерін пайдалануға болады. Біріншісі көшірме нөмірін қамтитындай процесс атауын өзгертуге мүмкіндік береді, ал екіншісі қанша көшірмені іске қосу керектігін көрсетеді.
process_name
айнымалысы әдетте бағдарлама атауы мен процесс нөмірін қамтитын питон жолын пішімдеу үлгісімен толтырылады: %(program_name)s_%(process_num)02d
. Мұнда жақшада айнымалының аты, одан кейін оның түрі көрсетіледі. Мысалы, бір бағдарламаны төрт ағында іске қосу үшін конфигурация файлын осы пішінге өзгерту керек:
$ sudo vi /etc/supervisor/conf.d/process.conf [program:process] directory=/home/sergiy/program/ command=/usr/bin/php process.php user=sergiy autostart=true autorestart=true process_name=%(program_name)s_%(process_num)02d numprocs=4
Енді supervisorctl
қайта іске қосу керек және 4 процесс қазірдің өзінде іске қосылады:
$ sudo supervisorctl status
Сонымен бірге, бағдарлама шығарған барлық деректерді журнал файлына сақтауға болады. Бұл үшін stdout_logfile
және stderr_logfile.
Мысалы, оның орындалу журналының файлын тікелей бағдарлама бар қалтада көрсетуге болады.
$ sudo vi /etc/supervisor/conf.d/process.conf [program:process] directory=/home/sergiy/program/ command=/usr/bin/php process.php user=sergiy autostart=true autorestart=true process_name=%(program_name)s_%(process_num)02d numprocs=4 stdout_logfile=/home/sergiy/program/process.log stderr_logfile=/home/sergiy/program/process.log.error
Қызметті қайта іске қосқаннан кейін бағдарлама қалтасында журналдар пайда болады:
Сол сияқты, процестердің шығысын супервайзердің стандартты шығысына қайта бағыттағыңыз келсе, redirect_stderr
және redirect_stdout.
Бағдарламаға кез келген орта айнымалылары қажет болса, оларды орта параметрі арқылы беруге болады. Айнымалылар үтір арқылы жазылуы керек. Мысалы:
$ environment=DISPLAY=":1",HOME="/root"
Әрбір конфигурация өзгергеннен кейін өзгертулерді қолдану үшін супервайзерді қайта іске қосуды ұмытпаңыз. Supervisorctl утилитасын пайдаланып процестерді басқаруға болады. Түсінгеніңіздей, процестердің тізімін көру үшін іске қосу керек:
$ sudo supervisorctl status
Әрі қарай, процестің атын біле отырып, оны қайта іске қосуға болады, мысалы process:process_00
:
$ sudo supervisorctl restart process:process_00
Тоқтату:
$ sudo supervisorctl stop process:process_00
Немесе іске қосыңыз:
$ sudo supervisorctl start process:process_00
Сонымен қатар, сіз процеске қосылып, fg пәрменін пайдаланып stdout/stderr
-ге не шығаратынын көре аласыз fg:
$ sudo supervisorctl fg process:process_00
Біз supervisor
қалай конфигурацияланғанын, сондай-ақ процестерді басқару үшін бағдарламаны қалай пайдалану керектігін қарастырдық.