Skrypt w Bashu

PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
0

Witam

Założenia są takie, że w zależności od dnia tygodnia (np. poniedziałek) będzie się wykonywać coś innego. W cyklu dwutygodniowym. To co się ma wykonać w dany dzień np. w poniedziałek jest do załatwienia z poziomu basha. Jednak jak ustawić crona, żeby wykonywał taki skrypt codziennie, ale w cyklu dwutygodniowym (czyli był wrażliwy na dni tygodnia: poniedziałek, wtorek, środa.. itd.)? Bo z poziomu basha raczej nie wykryję chyba czy jestem w 1 tygodniu czy w 2.

Pozdrawiam

hauleth
  • Rejestracja: dni
  • Ostatnio: dni
0

A czemu niby nie?

Kopiuj
$ date --help | grep tydz
  %U   numer tygodnia w roku, niedziela zaczyna tydzień (00...53)
  %V   numer tygodnia ISO, poniedziałek zaczyna tydzień (01...53)
  %W   numer tygodnia w roku, poniedziałek zaczyna tydzień (00...53)
PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
0

Hmm. Tyle to ja wiem :-) Ale może nieprecyzyjnie opisałem co chcę osiągnąć. Potrzebuję automat (skrypt) wykonujący:

Jeśli jest poniedziałek 1- część skryptu wykonująca zadania wykonujące się tylko w poniedziałek 1
Jeśli jest wtorek 1- część skryptu wykonująca zadania wykonujące się tylko we wtorek 1
Jeśli jest środa 1- część skryptu wykonująca zadania wykonujące się tylko w środę 1
Jeśli jest czwartek 1- część skryptu wykonująca zadania wykonujące się tylko w czwartek 1
Jeśli jest piątek 1- część skryptu wykonująca zadania wykonujące się tylko w piątek 1
Jeśli jest sobota 1- część skryptu wykonująca zadania wykonujące się tylko w sobotę 1
Jeśli jest niedziela 1- część skryptu wykonująca zadania wykonujące się tylko w niedzielę 1
Jeśli jest poniedziałek 2- część skryptu wykonująca zadania wykonujące się tylko w poniedziałek 2
Jeśli jest wtorek 2- część skryptu wykonująca zadania wykonujące się tylko we wtorek 2
Jeśli jest środa 2- część skryptu wykonująca zadania wykonujące się tylko w środę 2
Jeśli jest czwartek 2- część skryptu wykonująca zadania wykonujące się tylko w czwartek 2
Jeśli jest piątek 2- część skryptu wykonująca zadania wykonujące się tylko w piątek 2
Jeśli jest sobota 2- część skryptu wykonująca zadania wykonujące się tylko w sobotę 2
Jeśli jest niedziela 2- część skryptu wykonująca zadania wykonujące się tylko w niedzielę 2

I tak cyklicznie przez cały rok chciałbym powtarzać taki dwutygodnik. Oczywiście wpadający w odpowiednie dni tygodnia.

hauleth
  • Rejestracja: dni
  • Ostatnio: dni
0

To ustawiasz, że ma być co poniedziałek i sprawdzasz parzystość tygodnia i wykonujesz odpowiednią akcję.

PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
0

Mi nie wydaje mi się to takie proste. A co z przełomami miesięcy? Przecież wszystkie nie zaczynają się poniedziałkiem? A ja potrzebuję zachować ciągłość skryptu i rotacji dni.

LN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1398
0

Podaj przykład, który Cię tak dręczy. Przecież po poniedziałku zawsze jest wtorek. I nie ma to nic wspólnego z miesiącami...

PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
0

Problem w tym, który wtorek? Bo we wtorku1 co innego ma się wykonać niż we wtorku2. Z tym mam problem. Chodzi o rozpoznawanie, który wtorek ma się obecnie wykonać: 1 czy 2? 2 ma nastąpić po 1 i tak w kółko cały rok, z miesiąca na miesiąc: 1,2,1,2,1,2,1,2.... A przykład logiczny jest rozpisany wyżej. Kod nie ma nic tu do rzeczy.

LN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1398
0

Jak to który wtorek ? Po poniedziałku 1 jest zawsze wtorek 1. A po poniedziałku 2 jest zawsze wtorek 2.
No chyba, że nie rozumiem treści zadania :p

Madaoo
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 490
0

Jeżeli chcesz skrypt uruchomić w crontabie to masz tak w etc:
cron.d/ - no ogólny
cron.daily/ - codziennie
cron.hourly/ - co godzine
cron.monthly/ - raz w miesiacu
cron.weekly/ - raz w tygodniu

lub możesz pokongigurować komenda crontab -e i wyglada tak

          • <comenda>

1* od lewej to minuta
2* od lewej to godzine
3* od lewej to dzien miesiaca
4* od lewej to miesiac
5* od lewej to dzien tygodnia(0 - 7 gdzie chyba 0 i 7 to niedziela)

jak rozwiązać problem, albo jak napiał @winerfresh, lub możesz crona ustawić - to zostawiam Twojej inwencji twórczej np

10 10 2 * 2 reboot ///< o 10:10 każdego miesiąca kiedy będzie to 2 i wtorek będzie reboot systemu o tej godzinie :D

PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
0

Obsługę crona znam. Nie piszcie mi tu oczywistych oczywistości :-)

10 10 2 * 2 reboot -> I jak ma mi to pomóc? Podręcznikowy wręcz przykład :-) Ok, ale nieważne. Mam dwa skrypty. Pierwszy to zadania w pierwszym tygodniu, drugi w drugim. Jak je ustawić w cronie, aby zawsze jeden wykonywał się po drugim. Z uwzględnieniem, że jeśli dany tydzień zacznie się po koniec miesiąca to będzie kontynuowany z początkiem nowego miesiąca. Ewentualnie załatwić to jeszcze jednym globalnym skryptem wywołującym jakoś na przemian te dwa. date +%A załatwia mi tylko jaki jest dzień w tygodniu.

Przykład jednego (drugi jest analogiczny, tylko dla drugiego tygodnia, ale inne polecenia dla poszczególnych dni):

Kopiuj
#!/bin/bash

case `date +%A` in
	"poniedziałek" | "Monday" )
		`polecenia do wykonania w poniedzialek`;;
	"wtorek" | "Tuesday" )
		`polecenia do wykonania we wtorek`;;
	"środa" | "Wednesday" )
		`polecenia do wykonania w srode`;;
	"czwartek" | "Thursday" )
		`czwartek`;;
	"piątek" | "Friday" )
		`piatek`;;
	"sobota" | "Saturday" )
		;;
	"niedziela" | "Sunday" )
		;;
	*)
		;;
esac
  • Rejestracja: dni
  • Ostatnio: dni
0

a nie możesz gdzieś przechować zmiennej? od razu problem z głowy

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
0

Opisz dokładnie usecase.
Chcesz robić coś DOKŁADNIE co dwa tygodnie, niezależnie od miesiąca,
Czy chcesz coś robić pierwszego i trzeciego (albo drugiego i czwartego) poniedziałku MIESIĄCA.
Oba przypadki są różne, pierwszy jest prosty i łatwy do zrobienia korzystając z tego co ci napisał winerfresh

PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
0

Tak chcę coś robić co dwa tygodnie, niezależnie od miesiąca. Po prostu mam do wykonania zadania codziennie przez tygodnie inne, ale te dwa tygodnie mają się powtarzać przez cały rok.

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
1
Kopiuj
if [ $[ 1`date +%V` % 2 ] -eq 0 ]; then

fi

jedynka stanowi rozwiązanie problemu z systemem ósemkowym. bardziej prawidłowe będzie wymuszenie systemu dziesiętnego, czyli: ```bash if [ $[ 10#`date +%V` % 2 ] -eq 0 ]; then

fi

Kopiuj
PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
0

A do czego służy ta jedynka przed date?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.