ProHoster > Blog > Pulega > Cron i Linux: talafaasolopito, faʻaoga ma masini
Cron i Linux: talafaasolopito, faʻaoga ma masini
Na tusia e le tala masani e le matamata itula fiafia. I na taimi leaga sa leai ni tagata fai polokalame po o Unix, ae o aso nei ua iloa mautinoa e le au fai polokalame: o le a siaki e cron le taimi nai lo latou.
O fa'aoga laina fa'atonu o se vaivaiga ma se galuega mo a'u. sed, awk, wc, cut ma isi polokalame tuai o loʻo faʻatautaia e faʻamaumauga i luga o la matou 'auʻaunaga i aso uma. O le tele oi latou ua mamanuina e fai ma galuega mo le cron, o se faʻatulagaga na amata mai i le 70s.
Mo se taimi umi na ou faʻaogaina ai le cron i luga ole laiga, e aunoa ma le alu i faʻamatalaga, ae i se tasi aso, ina ua ou feagai ma se mea sese pe a faʻatautaia se tusitusiga, na ou filifili e suʻesuʻe maeʻaeʻa. O le auala lea na faʻaalia ai lenei tusiga, aʻo ou tusiaina na ou masani i le POSIX crontab, o filifiliga autu cron i faʻasalalauga lauiloa Linux ma le fausaga o nisi o latou.
O e fa'aogaina Linux ma fa'atino galuega cron? E te fiafia i le faʻatulagaina o polokalama faʻaoga i Unix? Ona tatou o ai lea!
O le fa'atinoina fa'avaitaimi o polokalame fa'aoga po'o polokalame fa'aletino ose mea e mana'omia i totonu o faiga fa'aoga uma. O le mea lea, na iloa ai e le au fai polokalame le manaʻomia o auaunaga e mafai ai ona latou fuafuaina faʻapitoa ma faʻatino galuega i se taimi ua leva.
Unix-pei o faiga faʻaogaina e suʻe lo latou tupuaga i tua i le Version 7 Unix, na atiaʻe i le 70s o le seneturi talu ai i Bell Labs, e aofia ai ma le lauiloa Ken Thompson. Fa'aliliuga 7 Unix na aofia ai fo'i le cron, o se 'au'aunaga mo le fa'atinoina masani o galuega fa'apitoa.
O se cron masani faʻaonaponei o se polokalama faigofie, ae o le faʻaogaina o le algorithm o le uluai kopi na sili atu ona faigofie: o le auaunaga na ala i luga i le minute, faitau se laulau ma galuega mai se faila e tasi (/etc/lib/crontab) ma faia mo le superuser na galuega sa tatau ona faia i le taimi nei.
Mulimuli ane, faʻaleleia faʻamatalaga o le auaunaga faigofie ma aoga na tuʻuina atu i faiga faʻaogaina uma e pei o Unix.
O faʻamatalaga lautele o le crontab format ma faʻavae autu o le faʻaogaina o le aoga na aofia ai i le tulaga autu o faiga faʻaogaina e pei o Unix - POSIX - i le 1992, ma o lea na avea ai le cron mai se tulaga faʻamaonia ma tulaga faʻapitoa.
I le 1987, Paul Vixie, ina ua uma ona suʻesuʻeina tagata Unix e uiga i o latou manaʻoga mo le cron, na tuʻuina atu ai se isi faʻataʻitaʻiga o le daemon na faʻasaʻo ai nisi o faʻafitauli o le cron masani ma faʻalauteleina le syntax o faila laulau.
I le lona tolu o lomiga o Vixie cron na amata ona ausia manaʻoga POSIX, e le gata i lea, o le polokalame sa i ai se laisene saoloto, pe sili atu foi e leai se laisene, sei vagana ai manaoga i le README: e le tuʻuina atu e le tusitala faʻamaoniga, le igoa o le tusitala. e le mafai ona tapeina, ma e na'o le polokalame e mafai ona fa'atau fa'atasi ma fa'ailoga puna. O nei manaʻoga na foliga mai e fetaui ma mataupu faavae o polokalama faakomepiuta na maua le lauiloa i na tausaga, o lea o nisi o faʻasalalauga Linux autu na faʻaalia i le amataga o le 90s na avea Vixie cron e avea ma a latou polokalama muamua ma o loʻo atinaʻe pea i aso nei.
Aemaise lava, Red Hat ma SUSE atiaʻe se tui o Vixie cron - cronie, ma Debian ma Ubuntu faʻaaoga le uluai lomiga o Vixie cron ma le tele o patches.
Seʻi o tatou masani muamua i le crontab faʻaoga faʻaoga o loʻo faʻamatalaina i le POSIX, a maeʻa ona tatou vaʻavaʻai i faʻaopoopoga o le syntax o loʻo tuʻuina atu i Vixie cron ma le faʻaogaina o fesuiaiga o Vixie cron i tufatufa lauiloa Linux. Ma le mea mulimuli, o le cherry i luga o le keke o le auiliiliga lea o le masini cron daemon.
POSIX crontab
Afai o le uluai cron e galue i taimi uma mo le superuser, o tagata faʻatulagaina faʻaonaponei e masani ona feagai ma galuega a tagata masani, lea e sili atu ona malupuipuia ma faigofie.
O Crons o lo'o tu'uina atu o se seti o polokalame e lua: o le cron daemon o lo'o fa'aauau pea ma le crontab fa'aoga avanoa mo tagata fa'aoga. O le mea mulimuli e mafai ai e oe ona faʻasaʻo laulau o galuega faʻapitoa mo tagata taʻitoʻatasi i totonu o le polokalama, aʻo faʻalauiloa e le daemon galuega mai laulau faʻaoga ma laulau.
В POSIX tulaga masani o le amio a le daemon e le o faamatalaina i soʻo se auala ma naʻo le polokalama faʻaoga e faʻamaonia crontab. O le i ai o masini mo le faʻalauiloaina o galuega a tagata faʻaoga, o le mea moni, faʻaalia, ae le o faʻamatalaina auiliili.
E ala i le vala'au i le crontab utility, e mafai ona e faia ni mea se fa: fa'asa'o le laulau o galuega a le tagata fa'aoga i le fa'atonu, uta le laulau mai se faila, fa'aali le laulau o lo'o iai nei, ma fa'amama le laulau o galuega. Fa'ata'ita'iga o le fa'aogaina o le crontab utility:
crontab -e # редактировать таблицу задач
crontab -l # показать таблицу задач
crontab -r # удалить таблицу задач
crontab path/to/file.crontab # загрузить таблицу задач из файла
Ina ua valaauina crontab -e o le a faʻaaogaina le faʻatonu faʻamaonia i le fesuiaiga o le siosiomaga masani EDITOR.
O galuega lava ia o loʻo faʻamatalaina i le faatulagaga lenei:
# строки-комментарии игнорируются
#
# задача, выполняемая ежеминутно
* * * * * /path/to/exec -a -b -c
# задача, выполняемая на 10-й минуте каждого часа
10 * * * * /path/to/exec -a -b -c
# задача, выполняемая на 10-й минуте второго часа каждого дня и использующая перенаправление стандартного потока вывода
10 2 * * * /path/to/exec -a -b -c > /tmp/cron-job-output.log
O vaega muamua e lima o faamaumauga: minute [1..60], itula [0..23], aso o le masina [1..31], masina [1..12], aso o le vaiaso [0. .6], lea o le 0 o le Aso Sa. Ole laina mulimuli, ono, ole laina ole a fa'atinoina e le fa'amatala fa'atonu masani.
I totonu o fanua muamua e lima, e mafai ona lisiina tau fa'avasegaina i koma:
# задача, выполняемая в первую и десятую минуты каждого часа
1,10 * * * * /path/to/exec -a -b -c
Po'o se va'aiga:
# задача, выполняемая в каждую из первых десяти минут каждого часа
0-9 * * * * /path/to/exec -a -b -c
Ole avanoa ole tagata ile fa'atulagaina o galuega o lo'o fa'atulafonoina ile POSIX e le cron.allow ma cron.deny faila, lea e lisi ai tagata e mafai ona maua le crontab ma tagata fa'aoga e aunoa ma le avanoa i le polokalame, i le faasologa. E le fa'atonutonuina e le fa'atonu le nofoaga o nei faila i so'o se auala.
E tusa ai ma le tulaga masani, e le itiiti ifo ma le fa suiga o le siosiomaga e tatau ona pasia i polokalame faʻalauiloa:
HOME - fa'asinomaga a le tagata fa'aoga.
LOGNAME — fa'aoga saini.
PATH o le ala lea e mafai ona e maua ai faʻaoga faʻaoga masani.
SHELL - ala i le fa'aliliu upu fa'aaoga.
O le mea moni, POSIX e leai se tala e uiga i le mea e sau ai tau mo nei fesuiaiga.
Fa'atau sili - Vixie cron 3.0pl1
O le tuaa masani o ituaiga eseese o cron lauiloa o Vixie cron 3.0pl1, na faʻalauiloaina i le lisi o meli comp.sources.unix i le 1992. O le a matou mafaufau i uiga autu o lenei faʻamatalaga i nisi auiliiliga.
Vixie cron e sau i polokalame e lua (cron ma crontab). E pei ona masani ai, o le daemon e nafa ma le faitau ma le faʻatinoina o galuega mai le laulau o galuega ma laulau faʻaoga tagata taʻitoʻatasi, ma o le crontab utility e nafa ma le teuteuina o laulau faʻaoga.
Lisi galuega ma faila fa'atulagaina
O loʻo iai le laulau faʻatonu sili i /etc/crontab. O le syntax o le laulau faʻapipiʻi e fetaui ma le syntax o Vixie cron, sei vagana ai o le koluma lona ono o loʻo faʻaalia ai le igoa o le tagata faʻaoga o loʻo i lalo o le na faʻalauiloaina le galuega:
O lo'o iai laulau masani a tagata fa'aoga ile /var/cron/tabs/username ma fa'aoga tutusa le syntax. A e faʻaogaina le crontab utility o se tagata faʻaoga, o faila ia e faʻasaʻo.
O lisi o tagata faʻaoga e mafai ona maua le crontab o loʻo pulea i le / var / cron / allow ma / var / cron / deny faila, lea e te manaʻomia ai le tuʻuina o le igoa faʻaoga i se laina ese.
Fa'aupuga fa'alautele
Fa'atusatusa i le POSIX crontab, o le fofo a Paul Vixey o lo'o i ai le tele o suiga aoga i le syntax o laulau a le aoga.
Ua maua se fa'asologa o laulau fou: mo se fa'ata'ita'iga, e mafai ona e fa'ailoa aso o le vaiaso po'o masina i lou igoa (Mon, Tue, ma isi):
# Запускается ежеминутно по понедельникам и вторникам в январе
* * * Jan Mon,Tue /path/to/exec
E mafai ona e faʻamaonia le laasaga e faʻalauiloa ai galuega:
# Запускается с шагом в две минуты
*/2 * * * Mon,Tue /path/to/exec
Laasaga ma vaeluaga e mafai ona fefiloi:
# Запускается с шагом в две минуты в первых десять минут каждого часа
0-10/2 * * * * /path/to/exec
O lo'o lagolagoina isi fa'aogaina i le fa'asologa masani (toe fa'afou, ta'i tausaga, ta'i tausaga, ta'i masina, ta'i vaiaso, aso ta'itasi, vaeluapo, ta'i itula):
# Запускается после перезагрузки системы
@reboot /exec/on/reboot
# Запускается раз в день
@daily /exec/daily
# Запускается раз в час
@hourly /exec/daily
Siosiomaga fa'atino galuega
Vixie cron fa'atagaina oe e sui le si'osi'omaga o fa'agasolo talosaga.
Ole fesuiaiga ole siosiomaga USER, LOGNAME ma le HOME e le na o le tuʻuina atu e le daemon, ae e ave mai se faila. sese. Ole suiga ole PATH ua seti ile "/usr/bin:/bin" ma le SHELL fesuia'i ua seti ile "/bin/sh". O tau o fesuiaiga uma sei vagana LOGNAME e mafai ona suia i laulau faʻaoga.
O nisi suiga ole si'osi'omaga (aemaise lava SHELL ma HOME) e fa'aogaina e le cron lava ia e fa'atino ai le galuega. Ole mea lea ole fa'aaogaina o le bash nai lo le sh masani e fa'atino ai galuega fa'ale-aganu'u atonu e foliga mai:
SHELL=/bin/bash
HOME=/tmp/
# exec будет запущен bash-ем в /tmp/
* * * * * /path/to/exec
Mulimuli ane, o suiga uma o le siosiomaga o loʻo faʻamatalaina i le laulau (faʻaaogaina e le cron pe manaʻomia e le faʻagasologa) o le a pasi atu i le galuega faʻatino.
Ina ia fa'asa'o faila, e fa'aoga e crontab le fa'atonu o lo'o fa'amaoti mai i le VISUAL po'o le EDITOR fesuiaiga o le siosiomaga. Afai o le si'osi'omaga na fa'atautaia ai le crontab e le'o fa'amatalaina nei suiga, ona fa'aaogaina lea o le "/usr/ucb/vi" (atonu o le ucb o le Iunivesite o Kalefonia, Berkeley).
cron i Debian ma Ubuntu
Ua faʻasaʻolotoina e le au atinaʻe o Debian ma faʻasalalauga sili ona suia lomiga Vixie cron version 3.0pl1. E leai se eseesega i le syntax o faila laulau; mo tagata faʻaoga e tutusa Vixie cron. Vaega Fou Sili: Lagolago syslog, SELinux и PAM.
E itiiti le iloa, ae o suiga faʻapitoa e aofia ai le nofoaga o faila faʻatulagaina ma laulau o galuega.
O laulau faʻaoga i Debian o loʻo i totonu o le /var/spool/cron/crontabs directory, o loʻo iai pea le laulau faʻaoga - i /etc/crontab. Debian package-specific task table o loʻo tuʻuina i /etc/cron.d, mai le mea e otometi ai ona faitau e le cron daemon. O le fa'atonuga o tagata fa'aoga e pulea e le /etc/cron.allow ma /etc/cron.deny faila.
O le atigi faaletonu o loʻo i ai pea / bin / sh, lea i Debian o se tamai atigi POSIX-tausi vase, fa'alauiloa e aunoa ma le faitauina o so'o se fa'atulagaga (i le tulaga e le fa'afeso'ota'i).
Cron lava ia i lomiga lata mai o Debian o loʻo faʻalauiloaina e ala i le systemd, ma e mafai ona vaʻaia le faʻatulagaga faʻalauiloa i /lib/systemd/system/cron.service. E leai se mea fa'apitoa i le fa'atulagaina o le 'au'aunaga; so'o se fa'atonuga fa'apitoa e mafai ona faia e ala i suiga o le si'osi'omaga e fa'ailoa sa'o i le crontab o tagata ta'itasi.
cronie i RedHat, Fedora ma CentOS
crony - tui ole Vixie cron version 4.1. E pei o Debian, e leʻi suia le syntax, ae o le lagolago mo PAM ma SELinux, galue i totonu o se fuifui, siaki faila e faʻaaoga ai faʻamatalaga ma isi vaega ua faʻaopoopoina.
O le faʻaoga faʻaletonu o loʻo i totonu o nofoaga masani: o le laulau faʻapipiʻi i /etc/crontab, afifi e tuʻu a latou laulau i /etc/cron.d, faʻaoga laulau e alu i totonu /var/spool/cron/crontabs.
O le daemon e tamoʻe i lalo o le pulega systemd, o le faʻatulagaina o auaunaga o le /lib/systemd/system/crond.service.
I luga o le Red Hat-pei o tufatufa, / bin / sh e faʻaaogaina e ala i le faaletonu i le amataga, o le bash masani. E tatau ona maitauina pe a faʻatautaia galuega cron e ala i / bin / sh, o le bash shell e amata ile POSIX-compliant mode ma e le faitau i soʻo se faʻaopoopoina faʻaopoopo, e taʻavale i le tulaga e le o fesoʻotaʻi.
cronie i SLES ma openSUSE
Le fa'asoa Siamani SLES ma lona fa'atupuina openSUSE fa'aaoga le cronie tutusa. O le daemon iinei o loʻo faʻalauiloaina foi i lalo o le systemd, o le faʻatulagaina o le tautua o loʻo i totonu /usr/lib/systemd/system/cron.service. Fa'atonuga: /etc/crontab, /etc/cron.d, /var/spool/cron/tabs. /bin/sh o le bash lava lea e tasi o lo'o fa'agasolo i le POSIX-compliant non-interactive mode.
Vixie cron masini
O fanau fa'aonaponei o le cron e le'i suia fa'atusatusa i Vixie cron, ae o lo'o maua pea ni foliga fou e le mana'omia e malamalama ai i mataupu o le polokalama. O le tele o nei faʻaopoopoga e le lelei le faʻatulagaina ma fenumiai le code. O le uluai cron source code na saunia e Paul Vixey o se fiafiaga e faitau.
O le mea lea, na ou filifili ai e faʻavasega le masini cron e faʻaaoga ai le faʻataʻitaʻiga o se polokalame cron masani i lala uma e lua o le atinaʻe - Vixie cron 3.0pl1. O le a ou faʻafaigofieina faʻataʻitaʻiga e ala i le aveeseina o ifdefs e faʻalavelave ai le faitau ma le faʻaaogaina o faʻamatalaga laiti.
O le galuega a le temoni e mafai ona vaevaeina i ni vaega:
Polokalame amata.
Aoina ma fa'afouina le lisi o galuega e fa'atino.
O lo'o fa'agasolo le matasele autu.
Amata se galuega.
Sei o tatou vaai ia i latou i le faasologa.
Amataina
A amata, pe a uma ona siaki le faagasologa o finauga, cron faʻapipiʻi le SIGCHLD ma le SIGHUP faʻailoga faailo. O le mea muamua na te faia se faʻamatalaga ogalaau e uiga i le faʻamutaina o le faʻagasologa o tamaiti, o le lona lua e tapunia le faila faila o le faila ogalaau:
O le cron daemon e masani ona tamo'e na'o ia i luga o le polokalama, na'o se superuser ma mai le cron directory autu. O valaau nei e fatuina ai se faila loka ma le PID o le daemon process, ia mautinoa e saʻo le tagata faʻaoga ma sui le lisi o loʻo i ai nei i le mea autu:
Ua setiina le ala fa'aletonu, lea o le a fa'aaogaina pe a amata faiga:
setenv("PATH", _PATH_DEFPATH, 1);
Ona fai lea o le "fa'ata'ita'i": e faia ai se kopi a tamaiti o le fa'agasologa e ala i le vala'au o le tui ma se sauniga fou i le fa'agasologa o tamaiti (valaau setsid). E le o toe mana'omia le fa'agasologa matua, ma e alu i fafo:
switch (fork()) {
case -1:
/* критическая ошибка и завершение работы */
exit(0);
break;
case 0:
/* дочерний процесс */
(void) setsid();
break;
default:
/* родительский процесс завершает работу */
_exit(0);
}
O le fa'amutaina o le fa'agasologa o matua e fa'amatu'u ai le loka i le faila loka. E le gata i lea, e manaʻomia le faʻafouina o le PID i le faila i le tamaititi. A maeʻa lea, faʻatumu le faʻamaumauga o galuega i:
Ona alu lea o le cron i le taamilosaga autu o galuega. Ae a'o le'i faia lena mea, e aoga le va'ai i le utaina o le lisi o galuega.
Aoina ma fa'afouina le lisi o galuega
O le galuega o le load_database e nafa ma le utaina o le lisi o galuega. E siaki le crontab faiga autu ma le lisi ma faila tagata faaaoga. Afai e le'i suia faila ma le fa'atonu, e le toe faitau le lisi o galuega. A leai, o se lisi fou o galuega e amata ona fai.
O lo'o fa'auluina se faila faila ma faila fa'apitoa ma igoa ole laulau:
/* если файл системной таблицы изменился, перечитываем */
if (syscron_stat.st_mtime) {
process_crontab("root", "*system*",
SYSCRONTAB, &syscron_stat,
&new_db, old_db);
}
Tu'u ai laulau a tagata fa'aoga i se matasele:
while (NULL != (dp = readdir(dir))) {
char fname[MAXNAMLEN+1],
tabname[MAXNAMLEN+1];
/* читать файлы с точкой не надо*/
if (dp->d_name[0] == '.')
continue;
(void) strcpy(fname, dp->d_name);
sprintf(tabname, CRON_TAB(fname));
process_crontab(fname, fname, tabname,
&statbuf, &new_db, old_db);
}
A maeʻa ona suia le database tuai i se mea fou.
I faʻataʻitaʻiga o loʻo i luga, o le process_crontab function call e faʻamaonia ai o loʻo i ai se tagata faʻaoga e fetaui ma le igoa faila o le laulau (sei vagana o se superuser) ona valaʻau loa load_user. Ua uma ona faitau e le vaega mulimuli le faila lava ia i lea laina ma lea laina:
while ((status = load_env(envstr, file)) >= OK) {
switch (status) {
case ERR:
free_user(u);
u = NULL;
goto done;
case FALSE:
e = load_entry(file, NULL, pw, envp);
if (e) {
e->next = u->crontab;
u->crontab = e;
}
break;
case TRUE:
envp = env_set(envp, envstr);
break;
}
}
O iinei, a le o le fesuiaiga o le siosiomaga e setiina (laina o le VAR = tau) e faʻaaoga ai le load_env / env_set galuega, poʻo le faʻamatalaga o galuega e faitau (* * * * * /path/to/exec) e faʻaaoga ai le galuega o le load_entry.
O le vaega faʻapipiʻi e toe foʻi mai load_entry o la matou galuega, lea e tuʻuina i le lisi lautele o galuega. O le galuega lava ia o loʻo faʻatinoina se faʻasologa o upu o le taimi, ae sili atu ona matou fiafia i le faʻatulagaina o fesuiaiga o le siosiomaga ma faʻasologa o galuega:
/* пользователь и группа для запуска задачи берутся из passwd*/
e->uid = pw->pw_uid;
e->gid = pw->pw_gid;
/* шелл по умолчанию (/bin/sh), если пользователь не указал другое */
e->envp = env_copy(envp);
if (!env_get("SHELL", e->envp)) {
sprintf(envstr, "SHELL=%s", _PATH_BSHELL);
e->envp = env_set(e->envp, envstr);
}
/* домашняя директория */
if (!env_get("HOME", e->envp)) {
sprintf(envstr, "HOME=%s", pw->pw_dir);
e->envp = env_set(e->envp, envstr);
}
/* путь для поиска программ */
if (!env_get("PATH", e->envp)) {
sprintf(envstr, "PATH=%s", _PATH_DEFPATH);
e->envp = env_set(e->envp, envstr);
}
/* имя пользовтеля всегда из passwd */
sprintf(envstr, "%s=%s", "LOGNAME", pw->pw_name);
e->envp = env_set(e->envp, envstr);
O le matasele autu e galue ma le lisi o loʻo iai nei o galuega.
Mata'u autu
O le uluai cron mai le Version 7 Unix sa galue faigofie lava: na toe faitau le faʻatulagaga i se matasele, faʻalauiloa galuega o le minute o loʻo i ai nei o se superuser, ma moe seia oʻo i le amataga o le isi minute. O lenei auala faigofie i masini tuai e manaʻomia ai le tele o punaoa.
O se isi faʻamatalaga na tuʻuina atu i SysV, lea na alu ai le daemon e moe seʻia oʻo i le minute lata mai lea na faʻamatalaina ai le galuega, pe mo le 30 minute. E itiiti lava punaoa na faʻaaogaina mo le toe faitauina o le faʻatulagaina ma le siakiina o galuega i lenei faiga, ae o le vave faʻafouina o le lisi o galuega na avea ma faʻalavelave.
Na toe foʻi Vixie cron i le siakiina o lisi o galuega e tasi i le minute, o le mea e lelei ai i le faaiuga o le 80s sa i ai le tele o punaoa i masini Unix masani:
/* первичная загрузка задач */
load_database(&database);
/* запустить задачи, поставленные к выполнению после перезагрузки системы */
run_reboot_jobs(&database);
/* сделать TargetTime началом ближайшей минуты */
cron_sync();
while (TRUE) {
/* выполнить задачи, после чего спать до TargetTime с поправкой на время, потраченное на задачи */
cron_sleep();
/* перечитать конфигурацию */
load_database(&database);
/* собрать задачи для данной минуты */
cron_tick(&database);
/* перевести TargetTime на начало следующей минуты */
TargetTime += 60;
}
Ole galuega ole cron_sleep e a'afia sa'o ile fa'atinoina o galuega, vala'au ile job_runqueue (fa'amatala ma fa'atino galuega) ma le do_command (fa'atautaia galuega ta'itasi). O le galuega mulimuli e aoga le suʻesuʻeina atili.
Fa'atino se galuega
O le galuega do_command o loʻo faʻatinoina i se faiga Unix lelei, o lona uiga, e fai se tui e faʻatino ai le galuega e aunoa ma se faʻaogaina. O le faagasologa o matua o loʻo faʻaauau pea ona faʻalauiloa galuega, o le tamaititi e saunia le faagasologa o galuega:
switch (fork()) {
case -1:
/*не смогли выполнить fork */
break;
case 0:
/* дочерний процесс: на всякий случай еще раз пробуем захватить главный лок */
acquire_daemonlock(1);
/* переходим к формированию процесса задачи */
child_process(e, u);
/* по завершению дочерний процесс заканчивает работу */
_exit(OK_EXIT);
break;
default:
/* родительский процесс продолжает работу */
break;
}
E tele naua manatu ile child_process: e manaʻomia tulaga masani ma mea sese e tafe i luga ia te ia lava, ina ia mafai ai ona lafo i meli (pe a fai o le MAILTO siosiomaga fesuiaiga o loʻo faʻamaonia i le laulau galuega), ma, mulimuli ane, faʻatali mo le autu. faagasologa o le galuega e faamaeaina.
O le faagasologa o galuega e faia e se isi tui:
switch (vfork()) {
case -1:
/* при ошибки сразу завершается работа */
exit(ERROR_EXIT);
case 0:
/* процесс-внук формирует новую сессию, терминал и т.д.
*/
(void) setsid();
/*
* дальше многословная настройка вывода процесса, опустим для краткости
*/
/* смена директории, пользователя и группы пользователя,
* то есть процесс больше не суперпользовательский
*/
setgid(e->gid);
setuid(e->uid);
chdir(env_get("HOME", e->envp));
/* запуск самой команды
*/
{
/* переменная окружения SHELL указывает на интерпретатор для запуска */
char *shell = env_get("SHELL", e->envp);
/* процесс запускается без передачи окружения родительского процесса,
* то есть именно так, как описано в таблице задач пользователя */
execle(shell, shell, "-c", e->cmd, (char *)0, e->envp);
/* ошибка — и процесс на запустился? завершение работы */
perror("execl");
_exit(ERROR_EXIT);
}
break;
default:
/* сам процесс продолжает работу: ждет завершения работы и вывода */
break;
}
O le mea tonu lava lena o le cron. Na ou misia nisi faʻamatalaga manaia, mo se faʻataʻitaʻiga, faʻamatalaga mo tagata faʻaoga mamao, ae na ou faʻamatalaina le mea autu.
Taofi upu
O le Cron o se polokalama faigofie ma aoga, faia i tu ma aga sili ona lelei a le lalolagi Unix. Na te le faia se mea faʻaopoopo, ae o loʻo ia faia lana galuega ma le ofoofogia mo le tele o tausaga i le taimi nei. O le faʻaogaina o le code mo le faʻasologa e sau ma Ubuntu e le sili atu ma le itula, ma sa ou fiafia tele! Ou te faamoemoe na mafai ona ou faasoa atu ia te oe.
Ou te le iloa e uiga ia te oe, ae ua fai si ou faanoanoa i le iloaina o polokalame faaonaponei, faatasi ai ma lona uiga o le soona lavelave ma le soona fai, ua le mafai ona fesoasoani i sea faigofie mo se taimi umi.
E tele auala fa'aonaponei i le cron: systemd-timers e fa'atagaina oe e fa'atulaga faiga fa'apitoa ma fa'alagolago, fcron e fa'atagaina oe e sili atu ona fetu'una'i le fa'atonutonuina o punaoa e ala i galuega. Ae o le tagata lava ia, o le crontab sili ona faigofie sa lava lava mo au.
I se faapuupuuga, alofa ia Unix, faʻaoga polokalame faigofie ma aua neʻi galo e faitau le mana mo lau faʻavae!