Řešení 1:
Může být užitečné poznamenat, že úlohy v osobním crontab (crontab -e
) jsou vždy spuštěny jako jejich vlastník, kde /etc/crontab
obsahuje další povinné <user>
pole umožňující administrátorovi nakonfigurovat úlohu tak, aby se spouštěla jako uživatel bez oprávnění root.
Úpravy systémového crontab nebo nastavení osobního crontab pro root jsou pravděpodobně o něco přenosnější, nejsou specifické pro určité distribuce Linuxu a pravděpodobně jsou pro člověka pohodlnější udržovat se všemi úlohami v jednom souboru, ale:
Osobně upřednostňuji třetí možnost :pro každou naplánovanou úlohu přetáhněte buď
- soubor ve formátu
/etc/cron.d/
s úryvkem cron - spustitelný soubor (skript) v příslušném
/etc/cron.[hourly |daily |weekly |monthly]
adresář.
To se snadněji skriptuje (takové soubory můžete jednoduše vytvářet/přepisovat/mazat a nemusíte se hrabat v obsahu jednoho souboru crontab) a dobře to funguje s nástroji pro správu konfigurace a to už správci balíčků jsou. dělat stejně.
Úlohy/skripty v /etc/cron.[hourly |daily |weekly |monthly]
jsou vždy spuštěny jako root, kde se cron fragmenty v /etc/cron.d/
umožňují nastavení vlastního plánu i spuštění jako jiný uživatel se stejným povinným <user>
pole nalezené v /etc/crontab
.
Řešení 2:
Jak si nejlépe pamatuji, crontab -e
má další výhodu, že před instalací ověřuje syntaxi crontab a pokud uděláte chybu, dojde k chybě a obnoví předchozí. Tímto způsobem se nic, co dříve fungovalo, náhle nezastaví, pokud se popletete v syntaxi. Myslím, že nejlepší praxí je používat nástroje, jako je spuštění visudo
místo úpravy /etc/sudoers
přímo.
Řešení 3:
Je to opravdu otázka stylu, existuje důvod, proč OS nabízí více metod. Buďte důslední a nemíchejte a nekombinujte, pokud nechcete zmást nikoho jiného (nebo sebe po nějaké době, kdy se systémem nezabýváte) - pokud je těžké vidět, jaké úkoly jsou skutečně naplánovány napříč celým hostitelem, má to tendenci skončí ošklivým překvapením.
Řešení 4:
Abychom měli jistotu pro přidání úlohy cron, která vyžaduje práva konkrétního uživatele, osobně používám následující příkaz:
# crontab -u <user> -e
Můžete přidat sudo
taky.
Jak uvedl @rackandboneman, není třeba se zahrávat se soubory /etc/cron.d/. Pokud jde o úlohy cron uživatele, použijte funkce crontab
příkaz.