Jak skonfigurować zadanie Cron?


534

Chcę zaplanować uruchamianie zadania regularnie i słyszałem, że Cron jest na to sposób.

Jak dodać zadania Cron w Ubuntu?

Odpowiedzi:


655

Umieścić skrypt w jednym z tych folderów: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthlylub /etc/cron.weekly.

Jeśli to ci nie wystarczy, możesz dodać bardziej szczegółowe zadania, np. Dwa razy w miesiącu lub co 5 minut. Przejdź do terminala i wpisz:

crontab -e

Spowoduje to otwarcie twojego osobistego pliku crontab (plik konfiguracyjny crona). Pierwszy wiersz w tym pliku wyjaśnia wszystko! W każdym wierszu możesz zdefiniować jedno polecenie do uruchomienia i jego harmonogram, a format jest dość prosty, gdy się go zawiesi. Struktura jest:

minute hour day-of-month month day-of-week command

Dla wszystkich liczb, których możesz użyć, np. 5,34,55W polu minut będzie oznaczać bieg o 5, 34 i 55 po dowolnej godzinie.

Możesz także użyć interwałów. Są one zdefiniowane następująco: */20. Ten przykład oznacza co 20, więc w kolumnie minut jest to równoważne 0,20,40.

Aby uruchomić polecenie w każdy poniedziałek o 5:30 po południu:

30 17 * * 1 /path/to/command

lub co 15 minut

*/15 * * * * /path/to/command

Pamiętaj, że dzień tygodnia rozpoczyna się w przedziale od 0 do 6, gdzie 0 to niedziela.

Możesz przeczytać więcej tutaj .


7
Są one ogólnosystemowe i działają z wysokimi uprawnieniami. Nie umieszczałbym tam niczego, chyba że istnieje pilna potrzeba dostępu lub pozwolenia. Z reguły staraj się robić rzeczy bez możliwości. Dlatego bardziej podoba mi się ta odpowiedź: ubuntu.stackexchange.com/questions/2368/how-do-i-setup-cron-job/…
H Marcelo Morales

5
@Marcelo Morales, który również uruchomi podane komendy jako root! jeśli z drugiej strony nie używasz sudo, utworzysz crontab użytkownika, który zostanie uruchomiony jako użytkownik, który go utworzył!
LassePoulsen

4
* / 15 * * * * / path / to / command było dla mnie bardzo przydatne! dzięki!
Andrew Odendaal

18
Warto zauważyć, że zmiany są stosowane automatycznie, nie trzeba niczego restartować / przeładowywać.
Molomby,

6
Inną przydatną wskazówką jest to, że zamiast tego */15 * * * * /path/to/commandmożesz zrobić @reboot /path/to/command, aby wykonać coś podczas uruchamiania.
Kenneth Worden,

102

Jeśli zadanie, które chcesz uruchomić, może być uruchomione z tymi samymi uprawnieniami, co twój użytkownik, polecam użycie crontab użytkownika, który możesz edytować, uruchamiając EDITOR="gedit" crontab -e(który użyje gedit do edycji pliku crontab) lub po prostu crontab -e(który będzie używał domyślnego edytora) w terminalu.

Jeśli chcesz na przykład uruchamiać coś co 10 minut, dodajesz taką linię

*/10 * * * * /usr/bin/somedirectory/somecommand

i zapisz plik.

Możesz zobaczyć zawartość crontab użytkownika za pomocą crontab -l.

Aby dodać zadanie crona działające jako root, możesz edytować crontab roota, uruchamiając sudo crontab -e.

Najbardziej elastycznym sposobem jest użycie crontab systemowego, /etc/crontabktóry można edytować tylko z uprawnieniami roota. W tym pliku użytkownik ma wykonać każdą komendę zgodnie ze specyfikacją, aby można było uruchamiać komendy jako użytkownik root (na wypadek, gdybyś potrzebował tego poziomu uprawnień) lub jakikolwiek inny użytkownik w systemie.

Na przykład, jeśli chcesz uruchamiać coś co 10 minut jako root, możesz dodać taką linię

*/10 * * * * root /usr/bin/somedirectory/somecommand

(zauważ dodanie użytkownika do linii)

Możesz zobaczyć zawartość systemowego pliku crontab za pomocą cat /etc/crontab.

Więcej informacji: https://help.ubuntu.com/community/CronHowto


1
Oto słodki interaktywny manipulator cron, który da ci angielski do czasu cron crontab.guru
CTS_AE

52

Jeśli wolisz to zrobić za pomocą GUI, możesz przejść do Centrum oprogramowania i zainstalować Zaplanowane zadania (lub uruchomić sudo apt-get install gnome-schedule). Zapewni to potężny GUI do dodawania zadań CRON.

Pamiętaj, że jeśli użyjesz tej metody, zadania będą domyślnie wykonywane jako własny użytkownik, a nie jako root. Zazwyczaj jest to dobra rzecz.



@TankorSmash Możesz go pobrać tutaj
M. Becerra

Wymagania dotyczące pakietu nie mogą być spełnione w dniu 16.04
Odyseusz Ithaca

26

Polecam KDE's Scheduler ( kde-config-cron) Zainstaluj kde-config-cron . Dostęp do niego można uzyskać w Ustawieniach systemu w module Harmonogram zadań .

Zarządza Crontabs zarówno osobistymi, jak i systemowymi, a łatwość tworzenia granic czasowych bardzo mnie zaskoczyła (patrz zrzut ekranu poniżej). Myślę, że ta część jest naprawdę niedoceniana.

wprowadź opis zdjęcia tutaj


11

Harmonogram zadań KDE nie będzie działał w zwykłym systemie Ubuntu. Działa tylko w systemach KDE, takich jak KUbuntu. W systemie innym niż KDE wolisz używać harmonogramu gnome

$ sudo apt-get install gnome-schedule

Aplikacja ma zaplanowane zadania w Dash.


Nie znaleziono dla Ubuntu 16.04
SaidbakR

Proszę rzucić okiem na I can't install gnome schedule on Ubuntu 16.04@ askubuntu.com/questions/785657/… . Istnieje pakiet do pobrania @ bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060/… . Po prostu zagraj$ sudo dpkg -i gnome-schedule_2.3.0-0ubuntu16.04_amd64.deb
Antonio,

10

Chciałem ustawić zadanie Crona do uruchamiania przez skrypt bash, więc wykonanie skryptu dodałoby zadanie cron.

Zdałem sobie sprawę, że kiedy korzystasz z:

crontab -e 

Następnie tworzy plik:

/var/spool/cron/crontabs/root

Gdzie root to nazwa użytkownika uruchamiającego komendę crontab. Opierając się na tym i przynajmniej w 14.04, możemy wykonać następujące polecenia bash, aby utworzyć nowe zadanie Cron:

echo "30 17 * * 1 /path/to/command" > /var/spool/cron/crontabs/root

Musimy również ustawić poprawną własność pliku:

chown root:root /var/spool/cron/crontabs/root

I ustaw odpowiednie uprawnienia:

chmod 600 /var/spool/cron/crontabs/root

Jeśli po uruchomieniu crontab -ena liście znajdują się już zadania Cron, możesz dołączyć do listy za pomocą następującego polecenia:

echo "30 17 * * 1 /path/to/command" >> /var/spool/cron/crontabs/root

2

Przykład uruchamiania skryptu test_cron.shprzez crona co minutę na Ubuntu 18.04 za pomocą dowiązania symbolicznego:

test_cron.sh plik:

#!/bin/bash
echo "System backuped" >> /media/myname/data/backup/backup_tmp.log

Jeśli chcesz używać zmiennych skryptu w skrypcie, tak jak $USERw ścieżkach, lepiej wpisać dokładną ścieżkę, bash nie pozna twoich zmiennych w czasie wykonywania.

myname to nazwa użytkownika (część grupy root, nie jestem pewien, czy uprawnienia roota są konieczne).

Zezwalaj użytkownikom na ustawianie zadań cron, plik zostanie utworzony w razie potrzeby:

sudo nano /etc/cron.allow

root
myname

Ścieżka do skryptu to /home/myname/shell/test_cron.sh

Zmieniłem właściciela i uczyniłem go wykonywalnym:

sudo chown myname /home/myname/shell/test_cron.sh
chmod +x /home/myname/shell/test_cron.sh

Dodałem link symboliczny:

sudo ln -s /home/myname/shell/test_cron.sh /usr/bin/test_cron

Zalogowany, gdy mynamedodałem nowe zadanie do wykonania test_cronco minutę.

crontab -e

*/1 * * * * test_cron

Aby sprawdzić, czy polecenie na liście:

crontab -l

*/1 * * * * test_cron

Aby sprawdzić wykonanie

grep -i cron /var/log/syslog

Nov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.