Wątek przeniesiony 2021-01-24 20:40 z Webmastering przez Patryk27.

CRON jak uruchamiac plik od razu po zapisie

0

Witam,
Czy jest możliwość uruchamiania pliku w cron od razu po zapisie? w sensie że podaje tylko ścieżke i jak wyjdę i zapisze to się od razu uruchamia. Wiem że mogę podać dokładna godzinę i się uruchomi, ale czy jest możliwość zrobić to od razu po zapisie W CRONIE?

3

Brzmi na problem X/Y - co próbujesz osiągnąć?

3
sentence napisał(a):

czy jest możliwość zrobić to od razu po zapisie W CRONIE?

Jak ustawisz raz w tygodniu w niedziele o 20-stej i będzie dochodzić 20-sta to tak.
Jak nie, to pewnie i tak masz skrypt my_script.sh którego nazwę dajesz z crontab -e więc z palca pierwszy raz uruchom ./my_script.sh i to wszystko.
Następne wywołania pójdą jak je ustawiłeś crontab -l

0

Możesz sobie prosty wrapper zrobić, który doda skrypt do crona i wywoła go po dodaniu.

dodajDoCronaNastepnieUruchom.sh <harmonogram> <sciezka do srkyptu>

Szkielet:

#!/usr/bin/env bash

SCRIPT="/foo/bar.sh"
SCHEDULE="0 22 * * *"

crontab -l > new_cron.txt
echo "${SCHEDULE} ${SCRIPT}" >> new_cron.txt
crontab new_cron.txt

echo "Wykonuje $SCRIPT"
$SCRIPT

edited:
Nie zmienia to faktu, że funkcjonalność jaką chcesz mieć jest mega dziwna.

1

Dodaje do cron bardzo dużo plików które chce uruchomić od razu po dodaniu. Załóżmy, że w momencie wprowadzania jest godzina 20:01 i 50 sekund, w momencie wpisywania ścieżki i dokładnej daty z godziną uruchomienia 20:02 czas się zmienia, więc już muszę ustawić godzinę 20:03 zapisuje i wychodzę i czekam prawie minute żeby o 20:03 się skrypt odpalił. Może problem wydaje się śmieszny ale dużo plików tak uruchamiam i często się łapie że muszę czekać prawie minute na uruchomienie, gdzie zależy mi żeby to było uruchomione od razu. Wiem że mogę uruchomić od razu przez php nazwapliku.php ale w cron miałbym lepsza czytelność tego co już kiedyś uruchamiałem, a że wiem że cron ma możliwość uruchomień na różne sposoby to chciałem się dowiedzieć czy jest sposób aby podać tylko ścieżkę a w momencie wyjścia plik się uruchamia od razu. Nie znalazłem w necie więc postawiłem napisać tu.

1

@sentence:

Dodaje do cron bardzo dużo plików

Co ty chcesz robić? I co uzyskać?

https://serverfault.com/questions/85341/crontab-size-limit
Recent (2011) Ubuntu Debian is limited to 256 (and I just ran into that). FreeBSD will happily accept 600 entries. I haven't checked beyond that, but 600 crontab entries ought to be enough for anyone :)

Nie będę się spierać o liczbę i limit, bo nie jestem adminem, nie wrzucałem w crontab więcej od 1, 3 pozycje.

0
BraVolt napisał(a):

@sentence:

Dodaje do cron bardzo dużo plików

Co ty chcesz robić? I co uzyskać?

https://serverfault.com/questions/85341/crontab-size-limit
Recent (2011) Ubuntu Debian is limited to 256 (and I just ran into that). FreeBSD will happily accept 600 entries. I haven't checked beyond that, but 600 crontab entries ought to be enough for anyone :)

Nie będę się spierać o liczbę i limit, bo nie jestem adminem, nie wrzucałem w crontab więcej od 1, 3 pozycje.

Limitów nie przekraczam bo skrypty po uruchomieniu działają parę minut, więc aktywnych ostatecznie nie ma tak dużo. Myślałem, że na takie kombinacje uruchomień znajdzie się możliwość uruchomienia od razu po zapisie, ale widzę że nie ułatwię sobie życia.

0

@sentence: Wszystko się da, nawet okopać saperką w kałuży.
Tylko nie zawsze opłaca się czekać aż zamarznie albo ludzie wymyślą "sposoby".

cron Initial release May 1975; 45 years ago
Fajne narzędzie do wykonywania w określonych odstępach czasowych powtarzalnych zadań.

Twoje wymagania to bardziej IMO Batch processing
https://en.wikipedia.org/wiki/Batch_processing
bo jak rozumiem "sbkrypty po uruchomieniu działają parę minut"?

3

W powiązaniu z tym //4programmers.net/Forum/PHP/348690-uruchamianie_nowego_skryptu_podczas_wykonywania_kodu?p=1741753#id1741753 w końcu zabijesz serwer.
Trzeba wymyśleć inne sposoby rozwiązania problemu.

2

zależy mi żeby to było uruchomione od razu

W jakim celu zatem wrzucasz te swoje skrypty do crontaba - dlaczego nie uruchomisz ich od razu, z pominięciem crona?

0
Patryk27 napisał(a):

zależy mi żeby to było uruchomione od razu

W jakim celu zatem wrzucasz te swoje skrypty do crontaba - dlaczego nie uruchomisz ich od razu, z pominięciem crona?

Odpowiedz:

sentence napisał(a):

Wiem że mogę uruchomić od razu przez ```

php nazwapliku.phpale wcronmiałbym lepsza czytelność tego co już kiedyś uruchamiałem, a że wiem żecron``` ma możliwość uruchomień na różne sposoby to chciałem się dowiedzieć czy jest sposób aby podać tylko ścieżkę a w momencie wyjścia plik się uruchamia od razu. Nie znalazłem w necie więc postawiłem napisać tu.

4

cron służy do uruchamiania poleceń o określonych godzinach - nie powinieneś wykorzystywać go jako dziennika zdarzeń "bo crontab zapisuje listę poleceń"; to trochę jak gdybyś próbował z zegarka zrobić pamiętnik, ew. próbował wysłać e-maila poprzez wydrukowanie go i nadanie Pocztą Polską.

Jeśli zależy Ci wyłącznie na trzymaniu historii poleceń (a nie uruchamianiu ich o konkretnych godzinach), najprościej będzie napisać skrypt w stylu:

#/usr/bin/env bash

CMD="$@"

echo "$(date) | ${CMD}" >> /var/log/commands.log
bash -c "${CMD}"

... mając taki skrypt, każde polecenie uruchomione za jego pomocą:

./log /usr/bin/my-command.sh

... zostanie zalogowane do /var/log/commands.log.

Jak już wspomniałem, ten wątek to idealny przykład https://xyproblem.info/ - pamiętaj na przyszłość ;-)

0
Patryk27 napisał(a):

zależy mi żeby to było uruchomione od razu

W jakim celu zatem wrzucasz te swoje skrypty do crontaba - dlaczego nie uruchomisz ich od razu, z pominięciem crona?

Minusem dla mnie również jest to że gdy mam parę plików które nie uruchamiają się od razu, to po wykonaniu polecenia php nazwapliku.php nie uruchomię kolejnego bo muszę czekać aż ten się wykona...

3

Możesz wykorzystać &, aby uruchomić polecenie w tle (np. php dlugi-proces.php &).

1 użytkowników online, w tym zalogowanych: 0, gości: 1