Systemd, scripta interactive et timers

Systemd, scripta interactive et timers

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:

  1. Bootloader incipit
  2. Bootloader incipit firmware transiens ad parametri final.target deductis
  3. 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 ( https://habr.com/ru/post/477008/ https://github.com/skif-web/monitor)

  1. Ratio incipit
  2. 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)
  3. Satus postgresq
  4. 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)
  5. Invitatio mutat - sententia Promptus ad opus videtur
  6. 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