Ifihan
Nigbati o ba ndagbasoke fun Linux, iṣẹ ṣiṣe ti ṣiṣẹda awọn iwe afọwọkọ ibaraenisepo ti o ṣiṣẹ nigbati eto ba wa ni titan tabi tiipa dide. Ni eto V yi rorun, ṣugbọn pẹlu systemd o mu ki awọn atunṣe. Ṣugbọn o le ni awọn aago tirẹ.
Kini idi ti a nilo awọn ibi-afẹde?
Nigbagbogbo a kọ pe ibi-afẹde n ṣiṣẹ bi afọwọṣe ti runlevel ninu eto V -init. Mo Pataki koo. Diẹ sii ninu wọn wa ati pe o le pin awọn idii si awọn ẹgbẹ ati, fun apẹẹrẹ, ṣe ifilọlẹ ẹgbẹ kan ti awọn iṣẹ pẹlu aṣẹ kan ki o ṣe awọn iṣe afikun. Pẹlupẹlu, wọn ko ni awọn ilana, awọn igbẹkẹle nikan.
Apẹẹrẹ ti ibi-afẹde nigbati o ba mu ṣiṣẹ (ayẹwo ẹya ara ẹrọ) pẹlu iwe afọwọkọ ibaraenisepo nṣiṣẹ
Apejuwe ibi-afẹde funrararẹ:
cat installer.target
[Unit]
Description=My installer
Requires=multi-user.target
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target
AllowIsolate=yes
Wants=installer.service
Àfojúsùn yii yoo bẹrẹ nigbati multi-user.target ti ṣe ifilọlẹ ati pe o pe installer.service. Sibẹsibẹ, o le jẹ ọpọlọpọ iru awọn iṣẹ bẹ.
cat installer.service
[Unit]
# описание
Description=installer interactive dialog
[Service]
# Запустить один раз, когда остальное будет запущенно
Type=idle
# Команда запуска - вызов скрипта
ExecStart=/usr/bin/installer.sh
# Интерактивное взаимодействие с пользователем через tty3
StandardInput=tty
TTYPath=/dev/tty3
TTYReset=yes
TTYVHangup=yes
[Install]
WantedBy=installer.target
Ati nikẹhin, apẹẹrẹ ti iwe afọwọkọ ti n ṣiṣẹ:
#!/bin/bash
# Переходим в tty3
chvt 3
echo "Install, y/n ?"
read user_answer
Ohun pataki julọ ni lati yan final.target - ibi-afẹde eyiti eto yẹ ki o de ni ibẹrẹ. Lakoko ilana ibẹrẹ, systemd yoo lọ nipasẹ awọn igbẹkẹle ati ṣe ifilọlẹ ohun gbogbo ti o nilo.
Awọn ọna oriṣiriṣi wa lati yan final.target, Mo lo aṣayan agberu fun eyi.
Ifilọlẹ ikẹhin dabi eyi:
- Awọn bootloader bẹrẹ
- Bootloader bẹrẹ ifilọlẹ famuwia nipasẹ gbigbe paramita final.target
- Systemd bẹrẹ lati bẹrẹ eto naa. Sequentially lọ si installer.target tabi work.target lati basic.target nipasẹ wọn gbára (fun apẹẹrẹ, multi-user.target). Ikẹhin mu eto naa ṣiṣẹ ni ipo ti o fẹ
Ngbaradi famuwia fun ifilọlẹ
Nigbati o ba ṣẹda famuwia, iṣẹ ṣiṣe nigbagbogbo dide ti mimu-pada sipo ipo eto ni ibẹrẹ ati fifipamọ rẹ nigbati o ba pa. Ipinle tumọ si awọn faili atunto, idalenu data, awọn eto wiwo, ati bẹbẹ lọ.
Systemd nṣiṣẹ awọn ilana ni ibi-afẹde kanna ni afiwe. Awọn igbẹkẹle wa ti o gba ọ laaye lati pinnu ilana ibẹrẹ ti awọn iwe afọwọkọ.
Bawo ni o ṣe n ṣiṣẹ ninu iṣẹ akanṣe mi (
- Eto naa bẹrẹ
- Awọn iṣẹ settings_restore.service ti ṣe ifilọlẹ. O ṣayẹwo fun wiwa awọn faili settings.txt ni apakan data. Ti ko ba si nibẹ, lẹhinna faili itọkasi ni a gbe si aaye rẹ.
- ọrọigbaniwọle administrator
- oruko ogun,
- agbegbe aago
- agbegbe
- Ṣe ipinnu boya gbogbo awọn media ti wa ni lilo. Nipa aiyipada, iwọn aworan jẹ kekere - fun irọrun ti didaakọ ati gbigbasilẹ si media. Ni ibẹrẹ, o ṣayẹwo lati rii boya aaye ṣi wa ti a ko lo. Ti o ba wa, disiki naa ti pin.
- Ṣiṣẹda ẹrọ-id lati adiresi MAC. Eyi ṣe pataki fun gbigba adirẹsi kanna nipasẹ DHCP
- Eto nẹtiwọki
- Ifilelẹ awọn iwọn ti awọn àkọọlẹ
- Awakọ ita ti wa ni ipese fun iṣẹ (ti o ba mu aṣayan ti o baamu ṣiṣẹ ati pe awakọ naa jẹ tuntun)
- Bẹrẹ postgresq
- Iṣẹ imupadabọ bẹrẹ. O nilo lati ṣeto zabbix funrararẹ ati aaye data rẹ:
- Ṣayẹwo boya data data zabbix ti wa tẹlẹ. Ti kii ba ṣe bẹ, o ṣẹda lati awọn idalẹnu ibẹrẹ (pẹlu pẹlu zabbix)
- A ṣẹda atokọ ti awọn agbegbe akoko (nilo lati ṣafihan wọn ni wiwo wẹẹbu)
- IP ti o wa lọwọlọwọ wa, o han ni ọran (ifiwepe lati wọle si console)
- Ipe ifiwepe naa yipada - gbolohun naa Ṣetan lati ṣiṣẹ yoo han
- Famuwia ti šetan fun lilo
Awọn faili iṣẹ jẹ pataki, wọn jẹ awọn ti o ṣeto ọkọọkan ti ifilọlẹ wọn
[Unit]
Description=restore system settings
Before=network.service prepare.service postgresql.service systemd-networkd.service systemd-resolved.service
[Service]
Type=oneshot
ExecStart=/usr/bin/settings_restore.sh
[Install]
WantedBy=multi-user.target
Bii o ti le rii, Mo fi awọn igbẹkẹle sori ẹrọ ki iwe afọwọkọ mi yoo kọkọ ṣiṣẹ, ati pe lẹhinna nẹtiwọọki yoo lọ soke ati DBMS yoo bẹrẹ.
Ati iṣẹ keji (igbaradi zabbix)
#!/bin/sh
[Unit]
Description=monitor prepare system
After=postgresql.service settings_restore.service
Before=zabbix-server.service zabbix-agent.service
[Service]
Type=oneshot
ExecStart=/usr/bin/prepare.sh
[Install]
WantedBy=multi-user.target
O jẹ idiju diẹ sii nibi. Ifilọlẹ naa tun wa ni multi-user.target, ṣugbọn LEHIN ti o bẹrẹ postgresql DBMS ati settings_restore mi. Ṣugbọn KI o to bẹrẹ awọn iṣẹ zabbix.
Iṣẹ aago fun logrotate
Systemd le rọpo CRON. Ni pataki. Jubẹlọ, awọn išedede ni ko soke si awọn iseju, ṣugbọn soke si awọn keji (kini ti o ba ti o ti wa ni ti nilo) Tabi o le ṣẹda kan monotonous aago, ti a npe ni nipa akoko kan lati iṣẹlẹ.
O jẹ aago monotonous ti o ka akoko lati ibẹrẹ ẹrọ ti Mo ṣẹda.
Eyi yoo nilo awọn faili 2
logrotateTimer.service - apejuwe gangan ti iṣẹ naa:
[Unit]
Description=run logrotate
[Service]
ExecStart=logrotate /etc/logrotate.conf
TimeoutSec=300
O rọrun - apejuwe ti aṣẹ ifilọlẹ.
Faili keji logrotateTimer.timer ni ibi ti awọn aago ṣiṣẹ:
[Unit]
Description=Run logrotate
[Timer]
OnBootSec=15min
OnUnitActiveSec=15min
[Install]
WantedBy=timers.target
Kini o wa nibi:
- aago apejuwe
- Akoko ibẹrẹ akọkọ, bẹrẹ lati bata eto
- akoko ti siwaju sii awọn ifilọlẹ
- Igbẹkẹle iṣẹ aago.Ni otitọ, eyi ni okun ti o ṣe aago
Iwe afọwọkọ ibaraenisepo nigba tiipa ati ibi-afẹde tiipa rẹ
Ni idagbasoke miiran, Mo ni lati ṣe ẹya eka diẹ sii ti pipa ẹrọ naa - nipasẹ ibi-afẹde ti ara mi, lati le ṣe ọpọlọpọ awọn iṣe. Nigbagbogbo a ṣe iṣeduro lati ṣẹda iṣẹ onehot pẹlu aṣayan RemainAfterExit, ṣugbọn eyi ṣe idiwọ fun ọ lati ṣiṣẹda iwe afọwọkọ ibaraenisọrọ.
Ṣugbọn otitọ ni pe awọn aṣẹ ti a ṣe ifilọlẹ nipasẹ aṣayan ExecOnStop ni a ṣe ni ita TTY! O rọrun lati ṣayẹwo - lẹẹmọ aṣẹ tty ki o ṣafipamọ iṣẹjade rẹ.
Nitorinaa, Mo ṣe imuse tiipa nipasẹ ibi-afẹde mi. Emi ko beere pe o tọ 100%, ṣugbọn o ṣiṣẹ!
Bii o ti ṣe (ni awọn ofin gbogbogbo):
Mo ṣẹda ibi-afẹde kan my_shutdown.target, eyiti ko dale lori ẹnikẹni:
my_shutdown.afojusun
[Unit]
Description=my shutdown
AllowIsolate=yes
Wants=my_shutdown.service
Nigbati o ba lọ si ibi-afẹde yii (nipasẹ systemctl ya sọtọ my_shutdwn.target), o ṣe ifilọlẹ iṣẹ iṣẹ my_shutdown.iṣẹ, iṣẹ ṣiṣe eyiti o rọrun - lati ṣiṣẹ iwe afọwọkọ my_shutdown.sh:
[Unit]
Description=MY shutdown
[Service]
Type=oneshot
ExecStart=/usr/bin/my_shutdown.sh
StandardInput=tty
TTYPath=/dev/tty3
TTYReset=yes
TTYVHangup=yes
WantedBy=my_shutdown.target
- Ninu iwe afọwọkọ yii Mo ṣe awọn iṣe pataki. O le ṣafikun ọpọlọpọ awọn iwe afọwọkọ si ibi-afẹde fun irọrun ati irọrun:
mi_tiipa.sh
#!/bin/bash --login
if [ -f /tmp/reboot ];then
command="systemctl reboot"
elif [ -f /tmp/shutdown ]; then
command="systemctl poweroff"
fi
#Вот здесь нужные команды
#Например, cp /home/user/data.txt /storage/user/
$command
Akiyesi. Lilo awọn /tmp/atunbere ati /tmp/tiipa awọn faili. O ko le pe afojusun pẹlu awọn paramita. Iṣẹ nikan ṣee ṣe.
Ṣugbọn Mo lo ibi-afẹde lati ni irọrun ni iṣẹ ati aṣẹ aṣẹ ti awọn iṣe.
Sibẹsibẹ, ohun ti o nifẹ julọ wa nigbamii. Ẹrọ naa nilo lati wa ni pipa/tun bẹrẹ. Ati pe awọn aṣayan 2 wa:
- Rọpo atunbere, tiipa ati awọn ofin miiran (wọn tun jẹ awọn aami si systemctl) pẹlu iwe afọwọkọ rẹ. Ninu iwe afọwọkọ, lọ si my_shutdown.target. Ati awọn iwe afọwọkọ inu ibi-afẹde lẹhinna pe systemctl taara, fun apẹẹrẹ, atunbere systemctl
- Aṣayan ti o rọrun, ṣugbọn Emi ko fẹran rẹ. Ni gbogbo awọn atọkun, maṣe pe tiipa/atunbere/miiran, ṣugbọn taara pe eto afojusun systemctl ya sọtọ my_shutdown.target
Mo yan aṣayan akọkọ. Ninu eto, atunbere (bii poweroff) jẹ awọn ọna asopọ si eto.
ls -l /sbin/poweroff
lrwxrwxrwx 1 root root 14 сен 30 18:23 /sbin/poweroff -> /bin/systemctl
Nitorinaa, o le rọpo wọn pẹlu awọn iwe afọwọkọ tirẹ:
atunbere
#!/bin/sh
touch /tmp/reboot
sudo systemctl isolate my_shutdown.target
fi
orisun: www.habr.com