Jak dodać wpis do mojego crontab?

13

Używam crontab po raz pierwszy. Chcesz napisać kilka bardzo prostych zadań testowania crona i uruchomić je.

$crontab * * * * * echo "Hi"

nic nie produkuje.

crontab */1 * * * * echo "hi"

mówi */1: No such file or directory.

Jak wyświetlić listę aktualnie uruchomionych zadań crona (nie tylko tych, które posiadam, ale także tych, które rozpoczęli inni użytkownicy, np. Root).

Jak mogę usunąć konkretne zadanie CRON?

xyz
źródło
Aby uzyskać instrukcje na temat edytowania i tworzenia zadań cron oraz objaśnienie struktury plików, zobacz ten przewodnik składni crontab
KJS

Odpowiedzi:

21

Nie możesz tak używać crontab. Użyj, man crontababy przeczytać o prawidłowym sposobie wywoływania tego narzędzia.

Będziesz chciał użyć crontab -edo edycji wpisów crona bieżącego użytkownika (możesz dodawać / modyfikować / usuwać linie). Służy crontab -ldo wyświetlania bieżącej listy skonfigurowanych zadań.

Jeśli chodzi o wyświetlanie plików crontab innych użytkowników, nie jest to możliwe bez rootowania w domyślnych instalacjach. Zobacz Jak wyświetlić listę wszystkich zadań cron dla wszystkich użytkowników, aby dowiedzieć się, jak wyświetlić listę wszystkiego (jako root).

Uwaga: zachowaj szczególną ostrożność, używając znaków globowania powłoki w wierszu poleceń ( *a ?zwłaszcza). *zostanie rozwinięty do listy plików w bieżącym katalogu, co może mieć nieoczekiwane efekty. Jeśli chcesz przekazać *coś jako argument, zacytuj to ( '*').

Mata
źródło
więc robię crontab -e iw edytorze umieszczam wpis * / 1 * * * * echo „cześć”, a kiedy zapisuję ten plik, widzę komunikat crontab: instalowanie nowego crontab. ale nie widzę komunikatów hi na ekranie. Czego teraz mi brakuje? dzięki.
xyz
2
Wyjście crontab nigdy nie przejdzie do twojego „ekranu”. Ze strony podręcznika POSIX dla crontab: „Jeśli standardowe wyjście i standardowy błąd nie zostaną przekierowane przez polecenia wykonane z wpisu crontab, wszelkie wygenerowane dane wyjściowe lub błędy zostaną wysłane użytkownikowi metodą zależną od implementacji”.
Mat
1
Dane wyjściowe zadania zostaną wysłane do lokalnej skrzynki pocztowej właściciela zadania. (Uruchamianie mailz linii poleceń powinien uzyskać dostęp do lokalnej skrzynki pocztowej, jeśli jest skonfigurowana). Aby zobaczyć „cześć” w środowisku graficznym, można ustawić zadanie jako: * * * * * export DISPLAY=:0; xmessage 'hi'.
manatwork
@manatwork Możesz także potrzebować XAUTHORITY, co może nie być łatwe .
derobert
7

Istnieją dwa sposoby edytowania własnych crontab:

  1. interaktywnie, używając crontab -e, który otworzy crontabedytor określony przez $VISUALlub $EDITOR, lub

  2. nieinteraktywnie, używając crontab crontab.txt, który po prostu zaimportuje crontabwpisy z pliku crontab.txt, zastępując istniejącą aktywną tabelę crontab dla bieżącego użytkownika.

Problem polega na tym, że po prostu crontabźle używasz polecenia.


Poniższe informacje dotyczą nieinteraktywnej manipulacji crontabem:

Aby programowo usunąć określone zadania , możesz zrobić coś takiego

$ crontab -l | grep -v 'PATTERN' >crontab.txt && crontab crontab.txt

gdzie PATTERNjest wyrażenie regularne, które będzie pasować do zadań, które chcesz usunąć. Tutaj crontab -lda ci swój obecny crontab.

Lub, jeśli masz wpisy w pliku o nazwie crontab-fragment.txt, który chcesz usunąć z aktywnego crontab,

$ crontab -l | grep -v -Fx -f crontab-fragment.txt >crontab.txt && crontab crontab.txt

Odczytuje bieżącą tabelę crontab i odfiltrowuje (usuwa) każdą linię, która również występuje w pliku crontab-fragment.txtw bieżącym katalogu (przy użyciu pełnego porównania ciągów linii). Wynik jest zapisywany, crontab.txta następnie ładowany stamtąd, aby zastąpić bieżący plik crontab.

Aby dodać jedno lub kilka zadań , zrób coś takiego

$ crontab -l | cat - crontab-fragment.txt >crontab.txt && crontab crontab.txt

Zakłada się, że plik crontab-fragment.txtzawiera wpisy, które chcesz dodać. Odczytuje bieżący plik crontab, dołącza do niego wpisy crontab-fragment.txti tworzy crontab.txt. crontab.txtPlik następnie zastępuje bieżącej tabeli.

Kusalananda
źródło
2

Jeśli chcesz interaktywnie modyfikować plik crontab, uruchom polecenie crontab -ebez żadnej innej opcji. Spowoduje to uruchomienie edytora na kopii crontab; po wyjściu z edytora edytowana kopia stanie się nowym crontabem. Możesz kontrolować, który edytor jest uruchamiany poprzez zmienne środowiskowe VISUALiEDITOR . Aby wyświetlić listę crontab, uruchom crontab -l.

Jeśli chcesz zmodyfikować crontab w skrypcie zestawu VISUALi EDITORna ścieżkę do skryptu lub do powłoki snippet, który modyfikuje plik dostarczany w miejscu. Edytor edjest tutaj możliwością lub sed -ijeśli twoja implementacja sedma tę opcję. Jeśli chcesz bezwarunkowo dodać linię, możesz użyć echo … >>. Uważaj na cytowanie; w razie wątpliwości napisz skrypt i podaj nazwę skryptu jako EDITOR.

script=$(mktemp)
cat <<'EOF' >"$script"
#!/bin/sh
ed -s "$1" <<'EOS'
g/^ *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *echo "hi"$/d
$a
* * * * * echo "hi"
.
w
q
EOS
EOF
Gilles „SO- przestań być zły”
źródło
2

Jest trochę późno, ale dla innych, którzy tu szukają. Są łatwiejsze sposoby niż manipulowanie strumieniami wejścia / wyjścia za pomocą VISUALi EDITOR.

Możesz po prostu napisać harmonogram crona w pliku, 1 zadanie na linię i użyć polecenia crontab [filename], abyś mógł włączyć catswoje zadania filenamejako część skryptu, a następnie, jeśli chcesz, na końcu wywołać crontab.

w rzeczywistości jest to najczęstsze użycie jako man crontabwskazówki, wymieniając je najpierw

Lindsay Ryan
źródło
2

Jeśli chcesz dodać wpisy do crontabautomatyzacji lub z wiersza poleceń, możesz to zrobić (ustawiając godziny, które chcesz mieć)

echo "* * * * * /yourpath/yourcommand 2>&1 >> /var/log/somelog.log" >> /var/spool/cron/root (or appropriate username)

Następnie:

service crond reload

przeładować crontabs.

Chris Sprucefield
źródło
Nie można tego przenosić; nie wszystkie systemy uniksowe przechowują pliki crontab /var/spool/cron. Lepszym sposobem byłoby wykonanie crontab(1)polecenia.
thrig
To może być prawda, ale miało to pokazać zasadę, jak możesz to zrobić w systemie, i tak, crontab robi to, jeśli chcesz dodawać wiersz po wierszu. To nie była odpowiedź absolutna, ale taka, jeśli wiesz, gdzie są twoje rzeczy i musisz masowo dodać. Weź to za to, co to jest.
Chris Sprucefield
1

Wypróbuj za pomocą tego polecenia:

crontab -e 

następnie dodaj swoją pracę crona:

*/1 * * * * echo "hi"

w tym pliku.

użytkownik158204
źródło
0

Chciałbym podkreślić sposób, w jaki opisuję poniżej, chociaż zostało to wspomniane wcześniej w innym komentarzu. Uważam, że jest to bardzo przydatne podczas dodawania wpisów do pliku, a następnie dodawania pliku do crontab. Plik ten zawierałby dwa wpisy poniżej i nazwa pliku to hello-world-crontab.txt.

  • 0 09 * * * echo "Hello world!" >> /home/user/greeting.txt
  • 0 09 * * * python /home/user/greeting.py

Następnie wykonałem poniższe polecenie, aby dodać te wpisy do crontab.

  • $ crontab hello-world-crontab.txt

Następnym krokiem jest sprawdzenie, czy te wpisy zostały dodane.

  • $ crontab -l

Krótkie wyjaśnienie, co robi każdy wpis:

  • Ten wpis w crontab pisze „Hello world!” do pliku /home/user/greeting.txtcodziennie o 9 rano.
    • 0 09 * * * echo "Hello world!" >> /home/user/greeting.txt
  • Ten plik crontab wykonuje plik python, który jest drukowany w wierszu polecenia „Witaj świecie!” codziennie o 9 rano.
    • 0 09 * * * python /home/user/greeting.py
SylvesterAbreuLoreto
źródło