Skrypt w Bashu

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

0

A czemu niby nie?

$ 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)
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.

0

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

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.

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...

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.

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

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

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):

#!/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
0

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

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

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.

1
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

0

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

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