Cron nan Linux: istwa, itilizasyon ak aparèy

Cron nan Linux: istwa, itilizasyon ak aparèy

Klasik la te ekri ke èdtan kontan pa gade. Nan tan sovaj sa yo pa te gen ni pwogramè ni Unix, men jodi a pwogramè yo konnen pou asire w: cron pral kenbe tras nan tan olye pou yo.

Liy sèvis piblik yo se tou de yon feblès ak yon korve pou mwen. sed, awk, wc, cut ak lòt ansyen pwogram yo kouri pa scripts sou sèvè nou yo chak jou. Anpil nan yo fèt kòm travay pou cron, yon pwogramè ki soti nan ane 70 yo.

Pou yon tan long mwen te itilize cron supèrfisyèl, san yo pa antre nan detay, men yon jou, lè mwen te rankontre yon erè lè w ap kouri yon script, mwen deside gade nan li byen. Men ki jan atik sa a te parèt, pandan m te ekri l mwen te vin abitye ak POSIX crontab, opsyon cron prensipal yo nan distribisyon Linux popilè ak estrikti kèk nan yo.

Èske w ap itilize Linux ak travay cron? Èske w enterese nan achitekti aplikasyon sistèm nan Unix? Lè sa a, nou sou wout nou!

Content

Orijin nan espès yo

Peryodik ekzekisyon itilizatè oswa pwogram sistèm se yon nesesite evidan nan tout sistèm opere. Se poutèt sa, pwogramasyon yo reyalize bezwen an pou sèvis ki pèmèt yo santralman planifye ak egzekite travay yon bon bout tan de sa.

Sistèm operasyon ki sanble ak Unix trase orijin yo tounen nan Version 7 Unix, devlope nan ane 70 yo nan dènye syèk la nan Bell Labs, ki gen ladan Ken Thompson la pi popilè. Version 7 Unix te gen ladan tou cron, yon sèvis pou kouri regilyèman travay superitilizatè yo.

Yon cron modèn tipik se yon pwogram ki senp, men algorithm fonksyònman nan vèsyon orijinal la te menm pi senp: sèvis la leve yon fwa pa minit, li yon tablo ak travay ki soti nan yon sèl fichye (/etc/lib/crontab) epi li te fè pou la. superutilisateur travay sa yo ki ta dwe fèt nan moman aktyèl la.

Imedyatman, vèsyon amelyore nan sèvis la senp ak itil yo te apwovizyone ak tout sistèm operasyon ki tankou Unix.

Deskripsyon jeneralize fòma crontab la ak prensip debaz operasyon sèvis piblik la te enkli nan estanda prensipal sistèm operasyon ki tankou Unix - POSIX - an 1992, e konsa cron soti nan yon estanda defakto te vin yon estanda de jure.

An 1987, Paul Vixie, ki te fè sondaj itilizatè Unix yo sou volonte yo pou cron, te pibliye yon lòt vèsyon demon an ki te korije kèk nan pwoblèm cron tradisyonèl yo ak elaji sentaks nan dosye tab yo.

Pa twazyèm vèsyon an nan Vixie cron te kòmanse satisfè kondisyon POSIX, anplis de sa, pwogram nan te gen yon lisans liberal, oswa pito pa te gen okenn lisans nan tout, eksepte pou volonte yo nan README a: otè a pa bay garanti, non otè a. pa ka efase, epi pwogram nan ka sèlman vann ansanm ak kòd sous. Kondisyon sa yo te tounen konpatib ak prensip lojisyèl gratis ki t ap pran popilarite nan ane sa yo, kidonk kèk nan distribisyon kle Linux ki te parèt nan kòmansman ane 90 yo te pran Vixie cron kòm youn sistèm yo epi yo toujou ap devlope li jodi a.

An patikilye, Red Hat ak SUSE devlope yon fouchèt nan Vixie cron - cronie, ak Debian ak Ubuntu itilize edisyon orijinal Vixie cron ak anpil plak.

Se pou premye fè konesans ak itilizatè itilite crontab ki dekri nan POSIX, apre sa nou pral gade ekstansyon sentaks yo bay nan Vixie cron ak itilizasyon varyasyon Vixie cron nan distribisyon Linux popilè. Epi finalman, Cherry la sou gato a se analiz la nan aparèy la cron daemon.

POSIX crontab

Si cron orijinal la toujou te travay pou superutilisateur a, orè modèn souvan fè fas ak travay itilizatè òdinè, ki pi an sekirite ak pratik.

Crons yo apwovizyone kòm yon seri de pwogram: Cron daemon ki toujou ap kouri ak sèvis piblik crontab ki disponib pou itilizatè yo. Lèt la pèmèt ou modifye tab travay espesifik pou chak itilizatè nan sistèm nan, pandan y ap demon an lanse travay nan tab itilizatè ak sistèm.

В POSIX estanda konpòtman an nan demon an pa dekri nan okenn fason epi sèlman pwogram itilizatè a ofisyèlman kontab. Egzistans lan nan mekanis pou lanse travay itilizatè se, nan kou, enplisit, men se pa dekri an detay.

Lè w rele sèvis piblik crontab la, ou ka fè kat bagay: edite tab travay itilizatè a nan editè a, chaje tab la nan yon dosye, montre tablo travay aktyèl la, epi netwaye tab travay la. Men kèk egzanp sou fason sèvis piblik crontab la ap travay:

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

Lè yo rele crontab -e editè ki espesifye nan varyab anviwònman estanda a pral itilize EDITOR.

Travay yo tèt yo dekri nan fòma sa a:

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

Premye senk jaden dosye yo: minit [1..60], èdtan [0..23], jou nan mwa [1..31], mwa [1..12], jou nan semèn nan [0. .6], kote 0 se Dimanch. Dènye, sizyèm, jaden an se yon liy ki pral egzekite pa entèprèt la kòmand estanda.

Nan senk premye jaden yo, valè yo ka lis separe pa vigil:

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

Oswa ak yon tire:

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

Aksè itilizatè yo nan orè travay yo reglemante nan POSIX pa dosye yo cron.allow ak cron.deny, ki bay lis itilizatè ki gen aksè a crontab ak itilizatè ki pa gen aksè nan pwogram nan, respektivman. Estanda a pa kontwole kote dosye sa yo nan okenn fason.

Dapre estanda a, omwen kat varyab anviwònman yo dwe pase nan pwogram lanse:

  1. HOME - anyè lakay itilizatè a.
  2. LOGNAME — koneksyon itilizatè.
  3. PATH se chemen kote ou ka jwenn sèvis piblik estanda sistèm.
  4. SHELL — chemen pou entèprèt kòmand yo itilize a.

Miyò, POSIX pa di anyen sou ki kote valè yo pou varyab sa yo soti.

Pi bon vandè - Vixie cron 3.0pl1

Zansèt komen variantes cron popilè yo se Vixie cron 3.0pl1, ki te prezante nan lis adrès comp.sources.unix an 1992. Nou pral konsidere karakteristik prensipal yo nan vèsyon sa a nan plis detay.

Vixie cron vini nan de pwogram (cron ak crontab). Kòm dabitid, demon an responsab pou li ak kouri travay ki soti nan tablo travay sistèm lan ak tab travay itilizatè endividyèl yo, epi sèvis piblik crontab la responsab pou koreksyon tab itilizatè yo.

Tablo travay ak dosye konfigirasyon

Tablo travay sipè itilizatè a sitiye nan /etc/crontab. Sentaks nan tablo sistèm lan koresponn ak sentaks Vixie cron, ak eksepsyon ke sizyèm kolòn nan li endike non itilizatè a sou non travay la te lanse:

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

Tablo travay regilye itilizatè yo sitiye nan /var/cron/tabs/username epi sèvi ak menm sentaks la. Lè ou kouri sèvis piblik la crontab kòm yon itilizatè, sa yo se dosye yo ki modifye.

Lis itilizatè ki gen aksè a crontab yo jere nan /var/cron/allow ak /var/cron/deny fichye yo, kote ou jis bezwen antre non itilizatè a nan yon liy separe.

Sentaks pwolonje

Konpare ak POSIX crontab, solisyon Paul Vixey a gen plizyè modifikasyon trè itil nan sentaks tab travay sèvis piblik la.

Yon nouvo sentaks tab vin disponib: pou egzanp, ou ka presize jou nan semèn nan oswa mwa pa non (Lun, Mar, ak sou sa):

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

Ou ka presize etap nan ki travay yo lanse:

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

Etap ak entèval yo ka melanje:

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

Yo sipòte altènativ entwisyon pou sentaks abityèl la (rdemare, chak ane, chak ane, chak mwa, chak semèn, chak jou, minwi, chak èdtan):

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

Anviwònman ekzekisyon travay

Vixie cron pèmèt ou chanje anviwònman aplikasyon kouri yo.

Varyab anviwònman USER, LOGNAME ak HOME pa senpleman bay demon an, men yo pran nan yon dosye. Passwd. Varyab PATH la mete sou "/usr/bin:/bin" epi varyab SHELL la mete sou "/bin/sh". Valè tout varyab eksepte LOGNAME ka chanje nan tab itilizatè yo.

Gen kèk varyab anviwònman (pi miyò SHELL ak HOME) yo itilize pa cron tèt li pou kouri travay la. Men ki sa w ap itilize bash olye de sh estanda pou fè travay koutim yo ta ka sanble:

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

Finalman, tout varyab anviwònman ki defini nan tablo a (itilize pa cron oswa ki nesesè nan pwosesis la) yo pral pase nan travay la kouri.

Pou modifye fichye yo, crontab sèvi ak editè ki espesifye nan varyab anviwònman VISUAL oswa EDITOR. Si anviwònman an kote crontab te kouri pa gen varyab sa yo defini, Lè sa a, "/usr/ucb/vi" yo itilize (ucb se pwobableman University of California, Berkeley).

cron sou Debian ak Ubuntu

Devlopè yo nan Debian ak distribisyon dérivés te lage vèsyon trè modifye Vixie cron vèsyon 3.0pl1. Pa gen okenn diferans nan sentaks nan dosye tab yo; pou itilizatè li se menm Vixie cron la. Pi gwo nouvo karakteristik: sipò syslog, SELinux и PAM.

Mwens aparan, men chanjman byen mèb yo enkli kote dosye konfigirasyon ak tab travay yo.

Tablo itilizatè yo nan Debian yo sitiye nan /var/spool/cron/crontabs anyè, tab sistèm lan toujou la - nan /etc/crontab. Tablo travay espesifik pou pake Debian yo mete nan /etc/cron.d, kote demon cron la otomatikman li yo. Kontwòl aksè itilizatè yo kontwole pa dosye /etc/cron.allow ak /etc/cron.deny.

Koki defo a toujou /bin/sh, ki nan Debian se yon ti kokiy ki konfòm ak POSIX priz, te lanse san yo pa li nenpòt konfigirasyon (nan mòd ki pa entèaktif).

Cron tèt li nan dènye vèsyon Debian yo te lanse atravè systemd, epi konfigirasyon lansman an ka wè nan /lib/systemd/system/cron.service. Pa gen anyen espesyal nan konfigirasyon sèvis la; nenpòt jesyon travay plis sibtil ka fè atravè varyab anviwònman yo te deklare dirèkteman nan crontab la nan chak itilizatè.

cronie sou RedHat, Fedora ak CentOS

kanmarad - fouchèt nan Vixie cron vèsyon 4.1. Kòm nan Debian, sentaks la pa chanje, men sipò pou PAM ak SELinux, k ap travay nan yon gwoup, swiv dosye lè l sèvi avèk inotify ak lòt karakteristik yo te ajoute.

Konfigirasyon default la se nan kote nòmal yo: tab sistèm lan nan /etc/crontab, pakè yo mete tab yo nan /etc/cron.d, tab itilizatè yo ale nan /var/spool/cron/crontabs.

Daemon an kouri anba kontwòl systemd, konfigirasyon sèvis la se /lib/systemd/system/crond.service.

Sou distribisyon Red Hat, yo itilize /bin/sh pa default nan demaraj, ki se bash estanda a. Li ta dwe remake ke lè w ap kouri travay cron atravè /bin/sh, koki a bash kòmanse nan mòd POSIX-konfòme epi li pa li okenn konfigirasyon adisyonèl, kouri nan mòd ki pa entèaktif.

cronie nan SLES ak openSUSE

Distribisyon Alman an SLES ak dérivés openSUSE li yo itilize menm zanmi an. Daemon isit la tou te lanse anba systemd, konfigirasyon sèvis la sitiye nan /usr/lib/systemd/system/cron.service. Konfigirasyon: /etc/crontab, /etc/cron.d, /var/spool/cron/tabs. /bin/sh se menm bash ki kouri nan mòd POSIX ki pa entèaktif.

Vixie cron aparèy

Desandan modèn nan cron pa chanje radikalman konpare ak Vixie cron, men yo toujou akeri nouvo karakteristik ki pa oblije konprann prensip yo nan pwogram nan. Anpil nan ekstansyon sa yo mal fèt ak konfonn kòd la. Kòd sous cron orijinal Paul Vixey se yon plezi pou li.

Se poutèt sa, mwen deside analize aparèy la cron lè l sèvi avèk egzanp lan nan yon pwogram cron komen nan tou de branch nan devlopman - Vixie cron 3.0pl1. Mwen pral senplifye egzanp yo nan retire ifdefs ki konplike lekti ak omisyon ti detay.

Travay demon an ka divize an plizyè etap:

  1. Inisyalizasyon pwogram lan.
  2. Kolekte ak mete ajou lis travay yo kouri.
  3. Prensipal cron bouk kouri.
  4. Kòmanse yon travay.

Ann gade yo nan lòd.

Inisyalizasyon

Lè yo kòmanse, apre yo fin tcheke agiman pwosesis yo, cron enstale moun kap okipe siyal SIGCHLD ak SIGHUP yo. Premye a fè yon antre nan boutèy demi lit sou revokasyon pwosesis timoun nan, dezyèm lan fèmen deskriptè dosye a nan dosye a:

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

Daemon cron la toujou kouri pou kont li sou sistèm nan, sèlman kòm yon super-itilizatè ak nan anyè cron prensipal la. Apèl sa yo kreye yon dosye fèmen ak PID pwosesis demon an, asire w ke itilizatè a kòrèk epi chanje anyè aktyèl la nan youn prensipal la:

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

Se chemen an default mete, ki pral itilize lè kòmanse pwosesis:

setenv("PATH", _PATH_DEFPATH, 1);

Lè sa a, pwosesis la se "daemonized": li kreye yon kopi timoun nan pwosesis la lè w rele fork ak yon nouvo sesyon nan pwosesis timoun lan (rele setsid). Pwosesis paran an pa nesesè ankò, epi li soti:

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

Sispansyon pwosesis paran an degaje kadna ki sou dosye kadna a. Anplis de sa, li oblije mete ajou PID nan dosye a bay timoun nan. Apre sa, baz done travay la ranpli:

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

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

Lè sa a, cron deplase sou sik travay prensipal la. Men, anvan sa, li vo pran yon gade nan chaje lis travay la.

Kolekte ak mete ajou lis travay la

Fonksyon load_database responsab pou chaje lis travay yo. Li tcheke crontab sistèm prensipal la ak anyè a ak dosye itilizatè yo. Si fichye yo ak anyè yo pa chanje, lis travay la pa re-li. Sinon, yon nouvo lis travay kòmanse fòme.

Chaje yon dosye sistèm ak dosye espesyal ak non tab:

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

Chaje tab itilizatè yo nan yon bouk:

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

Apre sa, ansyen baz done a ranplase ak yon nouvo.

Nan egzanp ki anwo yo, apèl fonksyon process_crontab la verifye ke yon itilizatè ki koresponn ak non fichye tab la egziste (sòf si li se yon superutilisateur) epi answit rele load_user. Lèt la deja li dosye a tèt li liy pa liy:

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

Isit la, swa yo mete varyab anviwònman an (liy fòm VAR=valè) lè l sèvi avèk fonksyon load_env / env_set, oswa li deskripsyon travay la (* * * * * /path/to/exec) lè l sèvi avèk fonksyon load_entry.

Antre antre ke load_entry retounen se travay nou an, ki mete nan lis jeneral travay yo. Fonksyon an tèt li fè yon analiz pwolib nan fòma tan an, men nou plis enterese nan fòmasyon nan varyab anviwònman ak paramèt lansman travay:

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

Bouk prensipal la ap travay ak lis travay aktyèl la.

Bouk prensipal

Cron orijinal la soti nan Version 7 Unix te travay byen tou senpleman: li re-li konfigirasyon an nan yon bouk, te lanse travay yo nan minit aktyèl la kòm yon super-itilizatè, epi li te dòmi jouk nan kòmansman an nan pwochen minit. Apwòch senp sa a sou machin ki pi gran yo te mande twòp resous.

Yon vèsyon altènatif te pwopoze nan SysV, kote demon an te ale nan dòmi swa jiska minit ki pi pre a pou ki travay la te defini, oswa pou 30 minit. Mwens resous yo te konsome pou re-li konfigirasyon an ak tcheke travay nan mòd sa a, men byen vit mete ajou lis la nan travay te vin konvenyan.

Vixie Cron te retounen nan tcheke lis travay yon fwa pa minit, erezman nan fen ane 80 yo te gen anpil plis resous sou machin estanda Unix:

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

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

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

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

Fonksyon cron_sleep la enplike dirèkteman nan egzekite travay, rele travay_runqueue (enumere ak kouri travay) ak do_command (kouri chak travay endividyèl) fonksyon yo. Dènye fonksyon an vo egzamine an plis detay.

Kouri yon travay

Fonksyon do_command la egzekite nan bon style Unix, se sa ki, li fè yon fouchèt pou fè travay la asynchrone. Pwosesis paran an kontinye lanse travay, pwosesis timoun nan prepare pwosesis travay la:

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

Gen anpil lojik nan child_process: li pran pwodiksyon estanda ak kouran erè sou tèt li, nan lòd yo voye li nan lapòs (si varyab anviwònman MAILTO yo espesifye nan tablo travay la), epi, finalman, tann pou prensipal la. pwosesis travay la pou konplete.

Pwosesis travay la fòme pa yon lòt fouchèt:

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

Sa se fondamantalman tout cron se. Mwen omisyon kèk detay enteresan, pou egzanp, kontablite pou itilizatè aleka, men mwen dekri bagay prensipal la.

Apreword

Cron se yon pwogram etonan senp epi itil, ki fèt nan pi bon tradisyon nan mond lan Unix. Li pa fè anyen anplis, men li te fè travay li bèl bagay pou plizyè deseni kounye a. Jwenn nan kòd la pou vèsyon an ki vini ak Ubuntu te pran pa plis pase yon èdtan, epi mwen te gen anpil plezi! Mwen espere ke mwen te kapab pataje li avèk ou.

Mwen pa konnen ou, men mwen yon ti kras tris pou reyalize ke pwogram modèn, ak tandans li yo twò konplike ak abstrè, pa te fezab nan senplisite sa a pou yon tan long.

Gen anpil altènativ modèn pou cron: systemd-timers pèmèt ou òganize sistèm konplèks ak depandans, fcron pèmèt ou kontwole konsomasyon resous pa travay plis fleksib. Men, pèsonèlman, crontab ki pi senp la te toujou ase pou mwen.

Nan ti bout tan, renmen Unix, sèvi ak pwogram senp epi pa bliye li mana a pou platfòm ou a!

Sous: www.habr.com

Add nouvo kòmantè