Jestem programistą i nie wiem dużo o cronach, ale chcę wiedzieć, czy to możliwe.
Powiedzmy, że mam tablicę [option1, option2, option3]
i skrypt, który uruchomiłem w NodeJS script.js
. Chcę uruchamiać ten skrypt codziennie o 1 w nocy. cron
Polecenie to może być:
0 1 * * * node ~/script.js
Cóż, teraz trudna część, chcę zmieniać opcje każdego dnia, więc na przykład w poniedziałek chcę biegać node ~/script.js option1
, następnego dnia node ~/script.js option2
i tak dalej. Chcę też móc dodawać / usuwać opcje w razie potrzeby, ale rotacja powinna pozostać nienaruszona.
Czy jest to w jakikolwiek sposób możliwe? Wiem, że mógłbym to zrobić również w węźle, ale wolałbym to zrobić spoza skryptu i pozostawić skrypt bez zmian.
Odpowiedzi:
To trudne. Co to znaczy, że obrót pozostanie nienaruszony po modyfikacji listy opcji? W końcu możesz całkowicie odbudować listę, niszcząc wszelkie wskazówki, gdzie jesteś.
To, co prawdopodobnie możesz zrobić, to skonfigurować katalog z plikami, które reprezentują twoje opcje (albo poprzez ich nazwę pliku, albo ich zawartość). Następnie za każdym razem, gdy wykonuje się zadanie cron, należy wyświetlić ten katalog, sortując pliki według czasu ostatniej modyfikacji. Weź najstarszy wpis,
touch
ten plik, aby zmienić jego czas modyfikacji na bieżący czas, a następnie użyj go do uruchomienia skryptu.Jeśli chcesz, możesz napisać to również w jednym wierszu dla crona, choć będzie trudniej go odczytać.
Dodanie opcji oznacza dodanie nowych plików do katalogu opcji. Usunięcie opcji oznacza usunięcie plików. W dowolnym momencie najstarszy plik zostanie uruchomiony jako następny, więc nowe opcje zostaną dodane na samym końcu cyklu, tak jakby właśnie został uruchomiony. Jeśli chcesz ponownie zamówić opcje, możesz je dotknąć w dowolnej kolejności.
źródło
$(ls -rt | head -n1)
oczywiście zepsuje się na nazwach plików zawierających nowe wiersze, ale w tym celu prawdopodobnie można uniknąć po prostu „nie rób tego”.Powiedzmy, że chcesz mieć inną opcję na każdy dzień tygodnia. Możesz:
Posiadaj osobne zadanie cron dla tych:
itp...
Podaj
bash
żądane opcje:(Nie uruchomiłem tego drugiego, więc może potrzebować trochę ulepszeń - ale to jest ogólny pomysł).
źródło
echo option1
itp., Ponieważ moje opcje mogą się zmieniać z tygodnia na tydzień. Po prostu zrób to w mojej aplikacji Node i śledź, który z nich uruchomiłem jako ostatni w db.Nie, nie mogę wymyślić żadnego czystego sposobu na zrobienie tego. Wystarczy napisać prosty skrypt otoki powłoki, który sprawdza datę i uruchamia aplikację węzła z wymaganymi opcjami każdego dnia.
źródło