Cron í Linux: saga, notkun og tæki

Cron í Linux: saga, notkun og tæki

Klassíkin skrifaði að gleðistundir horfi ekki. Á þessum villtu tímum voru hvorki forritarar né Unix, en í dag vita forritarar fyrir víst: cron mun fylgjast með tímanum í stað þeirra.

Skipanalínutæki eru bæði veikleiki og verk fyrir mig. sed, awk, wc, cut og önnur gömul forrit eru keyrð af skriftum á netþjónum okkar á hverjum degi. Mörg þeirra eru hönnuð sem verkefni fyrir cron, tímaáætlun upphaflega frá áttunda áratugnum.

Í langan tíma notaði ég cron yfirborðslega, án þess að fara í smáatriði, en einn daginn, þegar ég rakst á villu við keyrslu á handriti, ákvað ég að skoða það vel. Svona birtist þessi grein, á meðan ég skrifaði hana kynntist ég POSIX crontab, helstu cron valkosti í vinsælum Linux dreifingum og uppbyggingu sumra þeirra.

Ertu að nota Linux og keyrir cron verkefni? Hefur þú áhuga á kerfisforritaarkitektúr í Unix? Þá erum við á leiðinni!

efni

Uppruni tegunda

Reglubundin framkvæmd notenda- eða kerfisforrita er augljós nauðsyn í öllum stýrikerfum. Þess vegna hafa forritarar áttað sig á þörfinni fyrir þjónustu sem gerir þeim kleift að skipuleggja og framkvæma verkefni miðlægt fyrir löngu síðan.

Unix-lík stýrikerfi rekja uppruna sinn aftur til útgáfu 7 Unix, þróuð á áttunda áratug síðustu aldar hjá Bell Labs, þar á meðal af hinum fræga Ken Thompson. Útgáfa 70 Unix innihélt einnig cron, þjónustu til að keyra ofurnotendaverkefni reglulega.

Dæmigerð nútíma cron er einfalt forrit, en rekstraralgrím upprunalegu útgáfunnar var enn einfaldara: þjónustan vaknaði einu sinni á mínútu, las töflu með verkefnum úr einni skrá (/etc/lib/crontab) og framkvæmdi fyrir ofurnotandi þau verkefni sem hefðu átt að vera unnin í augnablikinu.

Í kjölfarið voru endurbættar útgáfur af einföldu og gagnlegu þjónustunni afhentar með öllum Unix-líkum stýrikerfum.

Almennar lýsingar á crontab sniði og grundvallarreglum um rekstur tólsins voru innifalin í aðalstaðli Unix-líkra stýrikerfa - POSIX - árið 1992, og þannig varð cron frá de facto staðli að de jure staðli.

Árið 1987 gaf Paul Vixie, eftir að hafa kannað Unix notendur um óskir þeirra um cron, út aðra útgáfu af púknum sem leiðrétti sum vandamál hefðbundins cron og stækkaði setningafræði töfluskráa.

Í þriðju útgáfunni af Vixie cron byrjaði cron að uppfylla POSIX kröfur, auk þess var forritið með frjálslegt leyfi, eða réttara sagt, það var ekkert leyfi, nema fyrir óskirnar í README: höfundur gefur engar ábyrgðir, nafn höfundar er ekki hægt að eyða og forritið er aðeins hægt að selja ásamt frumkóða. Þessar kröfur reyndust samrýmast meginreglum frjáls hugbúnaðar sem var að ná vinsældum á þessum árum, þannig að nokkrar af helstu Linux dreifingunum sem komu fram snemma á tíunda áratugnum tóku Vixie cron sem kerfiskerfi sitt og eru enn að þróa það í dag.

Sérstaklega þróa Red Hat og SUSE gaffal af Vixie cron - cronie, og Debian og Ubuntu nota upprunalegu útgáfuna af Vixie cron með mörgum plástra.

Við skulum fyrst kynnast crontab notendabúnaðarins sem lýst er í POSIX, eftir það munum við skoða setningafræðiviðbæturnar í Vixie cron og notkun á afbrigðum af Vixie cron í vinsælum Linux dreifingum. Og að lokum, kirsuberið á kökunni er greiningin á cron púkanum tækinu.

POSIX crontab

Ef upprunalega cronið virkaði alltaf fyrir ofurnotandann, taka nútíma tímasetningar oft á verkefnum venjulegra notenda, sem er öruggara og þægilegra.

Crons eru afhentar sem sett af tveimur forritum: cron púkinn sem er stöðugt í gangi og crontab tólið sem er í boði fyrir notendur. Hið síðarnefnda gerir þér kleift að breyta verkefnatöflum sem eru sértækar fyrir hvern notanda í kerfinu, á meðan púkinn ræsir verkefni úr notanda- og kerfistöflum.

В POSIX staðall hegðun púkans er ekki lýst á nokkurn hátt og aðeins notendaforritið er formlegt crontab. Tilvist aðferða til að ræsa verkefni notenda er auðvitað gefið í skyn, en ekki lýst í smáatriðum.

Með því að kalla crontab tólið er hægt að gera fjóra hluti: breyta verkefnatöflu notandans í ritlinum, hlaða töflunni úr skrá, sýna núverandi verkefnatöflu og hreinsa verkefnatöfluna. Dæmi um hvernig crontab tólið virkar:

crontab -e # редактировать таблицу задач
crontab -l # показать таблицу задач
crontab -r # удалить таблицу задач
crontab path/to/file.crontab # загрузить таблицу задач из файла

Þegar hringt er í crontab -e ritillinn sem tilgreindur er í stöðluðu umhverfisbreytunni verður notaður EDITOR.

Verkefnin sjálf eru lýst á eftirfarandi sniði:

# строки-комментарии игнорируются
#
# задача, выполняемая ежеминутно
* * * * * /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

Fyrstu fimm reitir skránna: mínútur [1..60], klukkustundir [0..23], dagar mánaðarins [1..31], mánuðir [1..12], vikudagar [0. .6], þar sem 0 er sunnudagur. Síðasti, sjötti, reiturinn er lína sem verður keyrð af staðlaða skipanatúlknum.

Í fyrstu fimm reitunum er hægt að skrá gildi aðskilin með kommum:

# задача, выполняемая в первую и десятую минуты каждого часа
1,10 * * * * /path/to/exec -a -b -c

Eða með bandstrik:

# задача, выполняемая в каждую из первых десяти минут каждого часа
0-9 * * * * /path/to/exec -a -b -c

Aðgangur notenda að verkefnaáætlun er stjórnað í POSIX af cron.allow og cron.deny skránum, sem skrá notendur með aðgang að crontab og notendur án aðgangs að forritinu, í sömu röð. Staðallinn stjórnar ekki staðsetningu þessara skráa á nokkurn hátt.

Samkvæmt staðlinum þarf að senda að minnsta kosti fjórar umhverfisbreytur til ræst forrit:

  1. HOME - heimaskrá notanda.
  2. LOGNAME — innskráning notanda.
  3. PATH er leiðin þar sem þú getur fundið staðlaða kerfisforrit.
  4. SHELL — leið að notaða skipanatúlknum.

Sérstaklega segir POSIX ekkert um hvaðan gildin fyrir þessar breytur koma.

Mest seldi - Vixie cron 3.0pl1

Sameiginlegur forfaðir vinsælra cron afbrigða er Vixie cron 3.0pl1, kynntur á comp.sources.unix póstlistanum árið 1992. Við munum íhuga helstu eiginleika þessarar útgáfu nánar.

Vixie cron kemur í tveimur forritum (cron og crontab). Eins og venjulega er púkinn ábyrgur fyrir því að lesa og keyra verkefni úr kerfisverkefnatöflunni og einstökum verkefnatöflum notenda og crontab tólið sér um að breyta notendatöflum.

Verkefnatafla og stillingarskrár

Verkefnatafla ofurnotanda er staðsett í /etc/crontab. Setningafræði kerfistöflunnar samsvarar setningafræði Vixie cron, að því undanskildu að sjötti dálkurinn í henni gefur til kynna nafn notandans sem verkefnið er ræst fyrir hönd:

# Запускается ежеминутно от пользователя vlad
* * * * * vlad /path/to/exec

Venjulegar verkefnatöflur notenda eru staðsettar í /var/cron/tabs/username og nota sömu setningafræði. Þegar þú keyrir crontab tólið sem notandi eru þetta skrárnar sem eru breyttar.

Listunum yfir notendur með aðgang að crontab er stjórnað í /var/cron/allow og /var/cron/deny skránum, þar sem þú þarft bara að slá inn notandanafnið í sérstakri línu.

Útvíkkuð setningafræði

Í samanburði við POSIX crontab inniheldur lausn Paul Vixey nokkrar mjög gagnlegar breytingar á setningafræði verkefnatafla tólsins.

Ný töflusetningafræði er orðin tiltæk: til dæmis geturðu tilgreint vikudaga eða mánuði með nafni (mán, þri, og svo framvegis):

# Запускается ежеминутно по понедельникам и вторникам в январе
* * * Jan Mon,Tue /path/to/exec

Þú getur tilgreint skrefið sem verkefni eru sett í gegnum:

# Запускается с шагом в две минуты
*/2 * * * Mon,Tue /path/to/exec

Hægt er að blanda saman skrefum og millibilum:

# Запускается с шагом в две минуты в первых десять минут каждого часа
0-10/2 * * * * /path/to/exec

Innsæi valkostir við venjulega setningafræði eru studdir (endurræsa, árlega, árlega, mánaðarlega, vikulega, daglega, miðnætti, klukkutíma fresti):

# Запускается после перезагрузки системы
@reboot /exec/on/reboot
# Запускается раз в день
@daily /exec/daily
# Запускается раз в час
@hourly /exec/daily

Verkefnaframkvæmd umhverfi

Vixie cron gerir þér kleift að breyta umhverfi keyrandi forrita.

Umhverfisbreyturnar USER, LOGNAME og HOME eru ekki einfaldlega veittar af púknum, heldur eru þær teknar úr skrá passwd. PATH breytan er stillt á "/usr/bin:/bin" og SHELL breytan er stillt á "/bin/sh". Gildi allra breyta nema LOGNAME er hægt að breyta í notendatöflum.

Sumar umhverfisbreytur (einkum SHELL og HOME) eru notaðar af cron sjálfum til að keyra verkefnið. Svona gæti það litið út að nota bash í stað venjulegs sh til að keyra sérsniðin verkefni:

SHELL=/bin/bash
HOME=/tmp/
# exec будет запущен bash-ем в /tmp/
* * * * * /path/to/exec

Að lokum verða allar umhverfisbreytur sem eru skilgreindar í töflunni (notaðar af cron eða nauðsynlegar fyrir ferlið) sendar í hlaupandi verkefni.

Til að breyta skrám notar crontab ritilinn sem tilgreindur er í VISUAL eða EDITOR umhverfisbreytunni. Ef umhverfið þar sem crontab var keyrt hefur ekki þessar breytur skilgreindar, þá er "/usr/ucb/vi" notað (ucb er líklega University of California, Berkeley).

cron á Debian og Ubuntu

Hönnuðir Debian og afleiddra dreifingar hafa gefið út mjög breytt útgáfa Vixie cron útgáfa 3.0pl1. Það er enginn munur á setningafræði töfluskráa; fyrir notendur er það sama Vixie cron. Stærsti nýi eiginleiki: Stuðningur syslog, SELinux и WFP.

Minna áberandi, en áþreifanlegar breytingar fela í sér staðsetningu stillingarskráa og verkefnatafla.

Notendatöflur í Debian eru staðsettar í /var/spool/cron/crontabs möppunni, kerfistaflan er enn til staðar - í /etc/crontab. Debian pakka-sértækar verkefnatöflur eru settar í /etc/cron.d, þaðan sem cron púkinn les þær sjálfkrafa. Aðgangsstýringu notenda er stjórnað af /etc/cron.allow og /etc/cron.deny skránum.

Sjálfgefin skel er enn /bin/sh, sem í Debian er lítil POSIX-samhæf skel þjóta, hleypt af stokkunum án þess að lesa neinar stillingar (í ógagnvirkri stillingu).

Cron sjálft í nýjustu útgáfum af Debian er hleypt af stokkunum í gegnum systemd og hægt er að skoða ræsingarstillinguna í /lib/systemd/system/cron.service. Það er ekkert sérstakt í þjónustustillingunum; hægt er að gera lúmskari verkefnastjórnun í gegnum umhverfisbreytur sem lýst er yfir beint í crontab hvers notanda.

cronie á RedHat, Fedora og CentOS

kumpána - gaffal af Vixie cron útgáfu 4.1. Eins og í Debian hefur setningafræðin ekki breyst, en stuðningi við PAM og SELinux, að vinna í klasa, rekja skrár með inotify og öðrum eiginleikum hefur verið bætt við.

Sjálfgefin stilling er á venjulegum stöðum: kerfistaflan er í /etc/crontab, pakkar setja töflurnar sínar í /etc/cron.d, notendatöflur fara í /var/spool/cron/crontabs.

Púkinn keyrir undir kerfisstjórnun, þjónustustillingin er /lib/systemd/system/crond.service.

Á Red Hat-líkum dreifingum er /bin/sh sjálfgefið notað við ræsingu, sem er staðall bash. Það skal tekið fram að þegar þú keyrir cron störf í gegnum /bin/sh byrjar bash skelin í POSIX-samhæfðum ham og les engar viðbótarstillingar, keyrir í ógagnvirkum ham.

cronie í SLES og openSUSE

Þýska dreifingin SLES og afleiða þess openSUSE nota sama félaga. Púkinn hér er einnig ræstur undir systemd, þjónustustillingin er staðsett í /usr/lib/systemd/system/cron.service. Stillingar: /etc/crontab, /etc/cron.d, /var/spool/cron/tabs. /bin/sh er sami bash sem keyrir í POSIX-samhæfðum ógagnvirkum ham.

Vixie cron tæki

Nútíma afkomendur cron hafa ekki breyst verulega miðað við Vixie cron, en samt eignast nýja eiginleika sem eru ekki nauðsynlegar til að skilja meginreglur forritsins. Margar af þessum viðbótum eru illa hönnuð og rugla kóðann. Upprunalega cron frumkóðann eftir Paul Vixey er ánægjulegt að lesa.

Þess vegna ákvað ég að greina cron tækið með því að nota dæmi um cron forrit sem er sameiginlegt fyrir báðar greinar þróunar - Vixie cron 3.0pl1. Ég mun einfalda dæmin með því að fjarlægja ifdefs sem flækja lestur og sleppa smáatriðum.

Vinnu púkans má skipta í nokkur stig:

  1. Frumstilling forrits.
  2. Að safna og uppfæra lista yfir verkefni sem á að keyra.
  3. Aðal cron lykkja í gangi.
  4. Byrjaðu verkefni.

Við skulum skoða þær í röð.

Frumstilling

Þegar byrjað er, eftir að hafa athugað ferlisröksemdirnar, setur cron upp SIGCHLD og SIGHUP merkjastjórnunina. Sá fyrsti færir inn annálsfærslu um lok barnaferlisins, sá síðari lokar skráarlýsingu notendaskrárinnar:

signal(SIGCHLD, sigchld_handler);
signal(SIGHUP, sighup_handler);

Cron púkinn keyrir alltaf einn á kerfinu, aðeins sem ofurnotandi og úr aðal cron möppunni. Eftirfarandi símtöl búa til læsingarskrá með PID púkans ferlisins, vertu viss um að notandinn sé réttur og breyttu núverandi möppu í þá aðalskrá:

acquire_daemonlock(0);
set_cron_uid();
set_cron_cwd();

Sjálfgefin slóð er stillt, sem verður notuð þegar ferlar eru ræstir:

setenv("PATH", _PATH_DEFPATH, 1);

Síðan er ferlið „dæmónað“: það býr til barnaafrit af ferlinu með því að kalla fork og nýja lotu í barnaferlinu (kalla setsid). Ekki er lengur þörf á foreldraferlinu og það hættir:

switch (fork()) {
case -1:
    /* критическая ошибка и завершение работы */
    exit(0);
break;
case 0:
    /* дочерний процесс */
    (void) setsid();
break;
default:
    /* родительский процесс завершает работу */
    _exit(0);
}

Uppsögn foreldraferlisins losar lásinn á lásskránni. Að auki þarf að uppfæra PID í skránni fyrir barnið. Eftir þetta er verkefnagagnagrunnurinn fylltur út:

/* повторный захват лока */
acquire_daemonlock(0);

/* Заполнение БД  */
database.head = NULL;
database.tail = NULL;
database.mtime = (time_t) 0;
load_database(&database);

Síðan heldur cron áfram í aðalvinnulotuna. En áður en það er þess virði er þess virði að kíkja á að hlaða verkefnalistanum.

Að safna og uppfæra verkefnalistann

load_database aðgerðin er ábyrg fyrir því að hlaða lista yfir verkefni. Það athugar aðalkerfishnappinn og möppuna með notendaskrám. Ef skrárnar og möppan hafa ekki breyst er verkefnalistinn ekki lesinn aftur. Annars byrjar nýr verkefnalisti að myndast.

Að hlaða kerfisskrá með sérstökum skráar- og töfluheitum:

/* если файл системной таблицы изменился, перечитываем */
if (syscron_stat.st_mtime) {
    process_crontab("root", "*system*",
    SYSCRONTAB, &syscron_stat,
    &new_db, old_db);
}

Að hlaða notendatöflum í lykkju:

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);
}

Eftir það er gamla gagnagrunninum skipt út fyrir nýjan.

Í dæmunum hér að ofan staðfestir process_crontab fallakallið að notandi sem passar við töfluskráarnafnið sé til (nema það sé ofurnotandi) og kallar síðan load_user. Hið síðarnefnda les nú þegar skrána sjálfa línu fyrir línu:

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;
    }
}

Hér er annað hvort umhverfisbreytan stillt (línur af forminu VAR=gildi) með því að nota load_env / env_set föllin, eða verklýsingin lesin (* * * * * /path/to/exec) með því að nota load_entry fallið.

Færslueiningin sem load_entry skilar er verkefni okkar, sem er sett á almennan lista yfir verkefni. Aðgerðin sjálf framkvæmir margvíslega þáttun á tímasniðinu, en við höfum meiri áhuga á myndun umhverfisbreyta og ræsibreytur verkefna:

/* пользователь и группа для запуска задачи берутся из 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);

Aðallykkjan vinnur með núverandi lista yfir verkefni.

Aðallykkja

Upprunalega cronið frá útgáfu 7 Unix virkaði einfaldlega: það las uppsetninguna aftur í lykkju, hóf verkefni núverandi mínútu sem ofurnotanda og svaf þar til næstu mínútu byrjaði. Þessi einfalda nálgun á eldri vélum krafðist of mikils fjármagns.

Önnur útgáfa var lögð til í SysV, þar sem púkinn fór að sofa annað hvort til næstu mínútu sem verkefnið var skilgreint fyrir, eða í 30 mínútur. Færri fjármagn var neytt til að endurlesa stillingar og athuga verkefni í þessum ham, en fljótt að uppfæra lista yfir verkefni varð óþægilegt.

Vixie cron fór aftur að skoða verkefnalista einu sinni á mínútu, sem betur fer í lok níunda áratugarins voru til mun fleiri úrræði á venjulegum Unix vélum:

/* первичная загрузка задач */
load_database(&database);
/* запустить задачи, поставленные к выполнению после перезагрузки системы */
run_reboot_jobs(&database);
/* сделать TargetTime началом ближайшей минуты */
cron_sync();
while (TRUE) {
    /* выполнить задачи, после чего спать до TargetTime с поправкой на время, потраченное на задачи */
    cron_sleep();

    /* перечитать конфигурацию */
    load_database(&database);

    /* собрать задачи для данной минуты */
    cron_tick(&database);

    /* перевести TargetTime на начало следующей минуты */
    TargetTime += 60;
}

Cron_sleep aðgerðin tekur beinan þátt í að framkvæma verkefni, kallar aðgerðirnar job_runqueue (telja upp og keyra verkefni) og do_command (keyra hvert einstakt verkefni). Síðasta aðgerðin er þess virði að skoða nánar.

Að keyra verkefni

Do_command aðgerðin er keyrð í góðum Unix stíl, það er að segja, það gerir gaffal til að framkvæma verkefnið ósamstillt. Foreldraferlið heldur áfram að hefja verkefni, barnaferlið undirbýr verkferlið:

switch (fork()) {
case -1:
    /*не смогли выполнить fork */
    break;
case 0:
    /* дочерний процесс: на всякий случай еще раз пробуем захватить главный лок */
    acquire_daemonlock(1);
    /* переходим к формированию процесса задачи */
    child_process(e, u);
    /* по завершению дочерний процесс заканчивает работу */
    _exit(OK_EXIT);
    break;
default:
    /* родительский процесс продолжает работу */
    break;
}

Það er talsvert mikið af rökfræði í child_process: það tekur venjulegt úttak og villustrauma yfir á sig, til að senda það síðan í póst (ef MAILTO umhverfisbreytan er tilgreind í verkefnatöflunni), og að lokum bíður eftir aðal ferli verkefnisins til að ljúka.

Verkferlið er myndað af öðrum gaffli:

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;
}

Það er í rauninni allt sem cron er. Ég sleppti nokkrum áhugaverðum smáatriðum, til dæmis bókhaldi fyrir fjarnotendur, en ég rakti aðalatriðið.

Eftirsögn

Cron er furðu einfalt og gagnlegt forrit, gert í bestu hefðum Unix heimsins. Hún gerir ekki neitt aukalega, en hún hefur sinnt starfi sínu frábærlega í nokkra áratugi núna. Það tók ekki meira en klukkutíma að komast í gegnum kóðann fyrir útgáfuna sem fylgir Ubuntu og ég skemmti mér konunglega! Ég vona að ég hafi getað deilt því með þér.

Ég veit ekki með þig, en mér þykir svolítið leiðinlegt að átta mig á því að nútímaforritun, með tilhneigingu til að flækja og ofsafengin, hefur ekki stuðlað að slíkum einfaldleika í langan tíma.

Það eru margir nútímalegir kostir við cron: systemd-tímamælir gera þér kleift að skipuleggja flókin kerfi með ósjálfstæði, fcron gerir þér kleift að stjórna auðlindanotkun á sveigjanlegri hátt eftir verkefnum. En persónulega var einfaldasta crontab alltaf nóg fyrir mig.

Í stuttu máli, elskaðu Unix, notaðu einföld forrit og ekki gleyma að lesa mana fyrir vettvang þinn!

Heimild: www.habr.com

Bæta við athugasemd