introduction
Cum Linux evolvit, munus creandi scripta interactiva quae exsecuta sunt cum systema involutum vel clausum oritur. In systemate V hoc facile erat, sed cum systemate servando facit. Sed id ipsum est.
Cur scuta opus est?
Saepius scriptum est scopus analogi runviae in systemate V -init inservire. Prorsus dissentio. Plures ex illis sunt et fasciculos in coetus dividere potes et, exempli gratia, coetus officiorum uno imperio deduces et actiones additis perficias. Nihil autem habent hierarchiae, sed dependentiae.
Exemplum de scopum cum enabled (feature overview) cum currit interactive script
Description of the target ipsum:
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
Hoc scopum incipiet cum multi-user.target emissus est et vocat installer.service. Sed ut officia esse sint aliqua.
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
Denique exemplum scriptionis exercetur;
#!/bin/bash
# ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ Π² tty3
chvt 3
echo "Install, y/n ?"
read user_answer
Praecipuum est eligere final.target - scopum ad quod systema pervenire debet ad satus. In processu startup, systema per clientelas peribit et omnia quae ei necessaria sunt mittent.
Diversae sunt modi desumo final.target, optione oneratus ad hoc usus sum.
Lorem finale hoc spectat:
- Bootloader incipit
- Bootloader incipit firmware transiens ad parametri final.target deductis
- Systemd incipit ratio incipere. Sequitur ut installer.target vel work.target a basic.target per suas clientelas (exempli gratia multi-user.target). Haec ratio ad operandum in optato modo
Praeparans firmware pro Lorem
Cum firmware creando, negotium semper oritur restituendi systema status in satus et servatam illam claudendi deorsum. Res publica significat configurationem imaginum, dumps datorum, occasus instrumenti, etc.
Systemd discurrit in eodem scopo in parallelis. Sunt clientelas quae permittunt te scriptorum seriem incipere.
Quomodo operatur in project (
- Ratio incipit
- Ministerium occasus_restore.officium educitur. Praesentiam fasciculi in sectione data sistit. Si non est, fasciculus in locum eius ponitur.
- administrator password
- hostname
- zona temporis
- locale
- Decernit an omnia media adhibeantur. Defalta, magnitudo imaginis parva est - pro facilitate scribendi ac notandi instrumentis. In satus, impedit videre si spatium adhuc insuetum est. Si est, orbis partitur.
- Id machinam gignens ex MAC oratio. Hoc magni momenti est pro eadem inscriptione obtinenda per DHCP
- Network occasus
- Determinat magnitudinem lignorum
- Externus coegi ad laborem praeparatur (si optio respondeat facultas et coegi est novus)
- Satus postgresq
- Incipit officium restituere. Opus est ut zabbix ipsum eiusque datorum praeparet:
- Checks num iam datorum zabbix est. Sin minus, creatur ab initialization dumps (inclusa cum zabbix)
- index temporis zonarum creatur (opus est eas ostendere in interfaciei interreti)
- Praesens IP inventus est, in causa monstratur (invitatio ad consolatorium aperiens)
- Invitatio mutat - sententia Promptus ad opus videtur
- Firmware usus est
Documenta servitii magni sunt, ii sunt qui seriem launches constituunt
[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
Ut videre potes, clientelas institui ut scriptum meum primum opus esset, et tunc demum retiaculum ascenderet et DBMS inciperet.
Secunda autem religio (praeparatio 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
Hic paulo implicatior est. Lorem etiam in multi-user.target est, sed POSTGREDIOR postgresql DBMS et occasu_restore meo est. Sed ante officia zabbix incipiens.
Timor officium pro logrotate
Restitui potest Systemd CRON. Graviter. Accuratio autem non est usque ad rem minutam, sed usque ad secundum (quod si opus est) vel timerem taediosum, quod ab eventu vocatum est, creare potes.
Timor fastidiosus erat tempus computans ab initio machinae quam creavi.
Hoc require II files
logrotateTimer.service - ipsa descriptio officii:
[Unit]
Description=run logrotate
[Service]
ExecStart=logrotate /etc/logrotate.conf
TimeoutSec=300
Simplex est - descriptio Lorem mandati.
Secundus fasciculus logrotateTimer.timer est ubi timers operantur:
[Unit]
Description=Run logrotate
[Timer]
OnBootSec=15min
OnUnitActiveSec=15min
[Install]
WantedBy=timers.target
Quid hic est?
- timor descriptionem
- Primum initium temporis, incipiens a tabernus ratio
- periodum longius launches
- Dependentiam timoris officium. In facto, hoc est filum quod facit timer
Interactive scriptum cum claudit deorsum et shutdown scopum
In alia evolutione, implicatiorem versionem facere debebam ut machinae avertendi - per proprium scopum, ut plures actiones exercerem. Solet commendari munus oneshotum cum RemainAfterExit optione creare, sed hoc vetat te litteras interactive creando.
Sed profecto mandata ab ExecOnStop optione proposita extra TTY exsecuta sunt! Reprehendo facile est - crustulum tty imperium et suum output serva.
Itaque shutdown per clypeum complevi. C% rectam esse non dico, sed facit!
Quomodo fiebat (in general terms) ;
Scopum my_shutdown.target creavi, quod ab aliquo non dependebat;
my_shutdown.target
[Unit]
Description=my shutdown
AllowIsolate=yes
Wants=my_shutdown.service
Cum ad hunc scopum pergens (per systemctl my_shutdwn.targetum segregatum), illud misit my_shutdown. servitii ministerium, cuius munus simplex est - ut my_shutdown.sh scriptionem exequatur:
[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
- In hoc scripto actiones necessarias facio. Multa scripta ad scopo pro flexibilitate et commodo addere potes:
my_shutdown.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
Nota. Usus /tmp/reboot et /tmp/schedulae files. Scopum cum parametris vocare non potes. Tantum officium fieri potest.
Sed scopum utor habere flexibilitatem in labore et certo ordine actionum.
Sed postea res magis interesting. Machina verti debet / restarted. Et sunt 2 bene:
- Reboot, shutdown et alia mandata (sunt symlinka systemctl) cum scripto tuo. Repone intra scriptionem, vade ad my_shutdown.target. Scripta intra scopo dein systemctl vocant directe, exempli gratia, systemctl reboot .
- Simplicior optio, sed non placet. In omnibus interfaces, shutdown/reboot/alia non vocant, sed directe vocant scopo systemctl isolate my_shutdown.target
Pri option eligendi te. In systemd, reboot (sicut poweroff) symlinka sunt ad systema.
ls -l /sbin/poweroff
lrwxrwxrwx 1 root root 14 ΡΠ΅Π½ 30 18:23 /sbin/poweroff -> /bin/systemctl
Ergo potes ea supplere cum scriptis tuis;
reboot
#!/bin/sh
touch /tmp/reboot
sudo systemctl isolate my_shutdown.target
fi
Source: www.habr.com