
Ինչու systemd-ի թայմերները գերազանցում են cron-ին
Ինժեները պնդում է, որ cron-ի դեմոնը 2026-ին գրաֆիկով աշխատանքի համար սխալ գործիք է, և բացատրում է, թե ինչն են systemd-ի թայմերները ավելի լավ անում. կանխատեսելի միջավայր, տեսանելի պատմություն և ընթեռնելի գրաֆիկներ։
Յուրաքանչյուրը, ով Linux-ում աշխատանք է գրաֆիկով պլանավորում, դիմում է cron-ին, և այդ բառը դարձել է ցանկացած գրաֆիկով գործարկման ընդհանուր անվանում։ 2026-ի մայիսին tjll.net-ի հեղինակը բլոգում պնդում է, որ 2026-ին բառացի cron-ի դեմոնը և նրա ավելի ժամանակակից ազգականները սխալ գործիք են, իսկ systemd-ի թայմերը ավելի շատ սեր է արժանի, քան ստանում է։
Ինչու ոչ cron
Նրա առարկությունները գործնական են, ոչ գաղափարական։ $PATH-ի երկիմաստ կարգավորումները դժվարացնում են cron-ի սկրիպտների գործարկումը կանխատեսելը։ stdout-ը և stderr-ը հաճախ անհետանում են սև փոսում կամ հայտնվում հոսթի փոստային համակարգում, ինչը գրեթե երբեք ցանկալի չէ։ Գործարկումների պատմությունը դժվար է հետևել ու քննել։ Իսկ գրաֆիկի քերականությունը, որով ոմանք հպարտանում են, հեշտ ընթեռնելի չէ. `01,31 04,05 1-15 1,6 *` արտահայտությունը վերծանելը իրական ջանք է պահանջում։ Թայմերները, գրում է նա, լուծում են այս բոլոր խնդիրները և ավելին։
Ծառայություն, թայմեր և գրաֆիկ
systemd-ի թայմերը unit-ի տեսակ է, որը գրաֆիկով պլանավորում է մեկ այլ unit՝ սովորաբար ծառայություն։ Հոդվածի օրինակը ծառայություն է, որն ունի տասից մեկ հավանականություն անջատելու մեքենան, և դրա հետ նույն անվանարմատով թայմեր ֆայլ /etc/systemd/system-ում, քանի որ թայմերի լռելյայն Unit= պարամետրը ընտրում է համապատասխան .service-ը։ .timer-ի գործարկումը այն դնում է ժամացույցի վրա, բայց չի կատարում թիրախը. enable-ը այն ակտիվացնում է բեռնման պահին WantedBy=timers.target տեղադրման թիրախի միջոցով։ Երկու մանրուք հաճախ շփոթեցնում է մարդկանց. ExecStart-ը լռելյայն չի գործարկվում shell-ի միջոցով, ուստի խողովակները չեն աշխատում ինչպես գրված է, և այն չի ժառանգում միջավայրի փոփոխականներ համակարգային կառավարչի լռելյայններից բացի։
Օրացուցային իրադարձություններ և ժամանակահատվածներ
cron-ից ամենամեծ հայեցակարգային թռիչքն այն է, որ systemd-ն առաջարկում է գրաֆիկի երկու տեսակ։ Առաջինը ծանոթ օրացուցային իրադարձությունն է՝ daily կամ դրա լրիվ ձևը `*-*-* 00:00:00`, իսկ երկրորդը նախորդ իրադարձության նկատմամբ չափվող ժամանակահատված է, օրինակ OnBootSec=1h՝ OnUnitActiveSec=1h-ի հետ, որը գործարկվում է բեռնումից մեկ ժամ անց, ապա ամեն գործարկումից մեկ ժամ անց։ Երկրորդ ձևը հաճախ համապատասխանում է իրական մտադրությանը. ժամանակավոր պանակը մաքրող աշխատանքին քիչ բան է տալիս բեռնումից անմիջապես հետո գործարկվելը, իսկ բոտը, որն API-ին հարցնում է ճշգրիտ յուրաքանչյուր տասնհինգ րոպեն մեկ՝ ըստ ժամացույցի, ստեղծում է տրաֆիկի գագաթ, որից ժամանակահատվածային գրաֆիկը խուսափում է։ Հեղինակը որպես առաջին աղբյուր մատնանշում է systemd.time ձեռնարկը և systemd-analyze calendar-ը, որը ստուգում ու բացատրում է արտահայտությունները և նույնիսկ վերծանում դասական cron wildcard-ները։
Նա առանձնացնում է նաև հնարավորություններ, որոնք cron-ը չի առաջարկում. list-timers, որը մեկ աղյուսակով ցույց է տալիս, թե ինչ կգործարկվի հաջորդը և ինչ գործարկվեց վերջինը. WakeSystem=, որը արթնացնում է քնած մեքենան աշխատանք կատարելու համար. FixedRandomDelay= և RandomizedOffsetSec=, որոնք ցրում են գործարկումները՝ խուսափելու «thundering herd»-ի գագաթներից. և Persistent=, որը բաց թողնված գործարկումը կատարում է թայմերի նորից ակտիվանալուն պես՝ օգտակար անջատված նոթբուքում։ Օգտատիրոջ մակարդակի թայմերները systemctl --user-ով նույնքան վավեր են, թեև [Install]-ի թիրախը երբեմն պետք է լինի default.target։
SiTech — AI-ով հզորացված վեբ մշակում
Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։