Litet bash script

Är Ni nybörjare i UNIX/Linux? Detta forum avhandla allmäna UNIX frågor.
Post Reply
KalleA
Posts: 424
Joined: 4 September 2003, 00:00
Location: stockholm

Litet bash script

Post by KalleA » 22 March 2004, 01:27

Hej jag skulle behöva ett litet script som skapar en ny mapp varje dag
i /home/ovrigt/ och den mappen ska bli kallad det datumet som är
tex nu ny dag för 25min sen 0322.
Sen finns de en mapp som heter test-today och ligger i /home
och den ska vara länkad till datumet som är.

Vore jätte glad för detta script /tack

Lucifer888
Posts: 4111
Joined: 3 February 2003, 12:18
Location: Stockholm

Post by Lucifer888 » 22 March 2004, 01:51

Code: Select all

#!/bin/bash
mappnamn=`date +%d%m`
mkdir /home/ovrigt/$mappnamn
rm /home/ovrigt/test-today
ln -s /home/ovrigt/$mappnamn /home/ovrigt/test-today
Borde väl funka? dock måste du sätta upp ett cronjobb som kör scriptet engång om dagen
"It's not that I hate people, I just think they're all idiots"
"Långt hår kräver mycket näring, framhålls det, och berövar hjärnan energi."

User avatar
kjell-e
Posts: 2817
Joined: 21 December 2002, 16:27
Location: Linköping
Contact:

Post by kjell-e » 22 March 2004, 01:51

Lägg upp ett cronjobb som körs t.ex. vid midnatt (eller en minut över som nedan) som kör ditt script:
01 0 * * * /sökväg/till/ditt/script

Följande script bör fungera.

#!/bin/sh

DIR="/home/ovrigt/"

# Skapa en ny katalog
mkdir $DIR/`date '+ %Y%m%d'`

# ta bort gamla symlänken och sätt upp en ny
rm $DIR/test-today
ln -s $DIR/`date '+ %Y%m%d'` $DIR/test-today

Lucifer888
Posts: 4111
Joined: 3 February 2003, 12:18
Location: Stockholm

Post by Lucifer888 » 22 March 2004, 01:52

hmm kanske smidigare med mappen i en variabel istället =)
"It's not that I hate people, I just think they're all idiots"
"Långt hår kräver mycket näring, framhålls det, och berövar hjärnan energi."

KalleA
Posts: 424
Joined: 4 September 2003, 00:00
Location: stockholm

Post by KalleA » 22 March 2004, 02:11

Okay tackar hoppas de funkar får vänta drygt 11 timmar för att
se om de funkar.

En sak bara dom " rm $DIR/test-today " är inte de och slänga något?
vill ju att 0311 ska vara kvar och alla andra datum.
eller e de ja som inte fattar riktigt?

User avatar
Kimmy
Posts: 126
Joined: 10 January 2004, 23:10
Location: Skövde
Contact:

Post by Kimmy » 22 March 2004, 02:44

'rm $DIR/test-today' tar väl bara bort den symboliska länken till föregående dag, inte själva mappen med dagens innehåll som ju blir i datumformat...
Too late... My time has come, send shivers down my spine, body's aching all the time.
Goodbye everybody! - I've got to go! ... Gotta leave you all behind and face the truth...

Lucifer888
Posts: 4111
Joined: 3 February 2003, 12:18
Location: Stockholm

Post by Lucifer888 » 22 March 2004, 02:55

Det går tyvärr inte att updatera en symlänk genom att bara skriva över den med "ln -s" så man måste ta bort den gamla symlänken för att sedan skapa en ny, inget materiall som ligger i mapparna försvinner, endast länken som pekar på en mapp
"It's not that I hate people, I just think they're all idiots"
"Långt hår kräver mycket näring, framhålls det, och berövar hjärnan energi."

User avatar
drbrno
Posts: 2834
Joined: 6 October 2002, 05:01
Location: Lund
Contact:

Post by drbrno » 22 March 2004, 15:39

ln -sf tar bort existerande länk/fil.

Lucifer888
Posts: 4111
Joined: 3 February 2003, 12:18
Location: Stockholm

Post by Lucifer888 » 22 March 2004, 16:26

ah bra att veta
"It's not that I hate people, I just think they're all idiots"
"Långt hår kräver mycket näring, framhålls det, och berövar hjärnan energi."

User avatar
JO
Posts: 12419
Joined: 1 May 2002, 02:00
Contact:

Post by JO » 22 March 2004, 16:32

Går även att använda "unlink". För att ta bort symlänken.

/JO
Registered User # 259689 http://counter.li.org
First humans moved out of caves;
then they invented writing;
now they invented intuitive GUIs;
all that remains is to return to caves.

KalleA
Posts: 424
Joined: 4 September 2003, 00:00
Location: stockholm

Post by KalleA » 24 March 2004, 02:47

Allt funkar perffa men om ja nu skulle vilja sätta chmod 777
så ja då lägga till
chmod 777 $DIR/`date +%d%m` ?

KalleA
Posts: 424
Joined: 4 September 2003, 00:00
Location: stockholm

Post by KalleA » 25 March 2004, 16:15

Kjell-e
Lägg upp ett cronjobb som körs t.ex. vid midnatt (eller en minut över som nedan) som kör ditt script:
01 0 * * * /sökväg/till/ditt/script
Vart ska ja lägga detta ?
jag gjorde föjlande

pico /etc/cron.daily/test.sh

skrev bara vägen till scriptet och sen chmod a+x test.sh

men de scriptet kördes ju inte vid 0.00 vilket ja ville.

Så vart ska ja lägga 01 0 * * * /sökväg/till/ditt/script ?

har en mapp som heter cron.d ska de va där tro?

User avatar
mog
Posts: 1578
Joined: 2 April 2002, 02:00
Location: gbg
Contact:

Post by mog » 25 March 2004, 16:18

crontab -e öppnar rutan där du skall skriva raden.

Du hittar även hur cron.daily fungerar med det kommandot.
Ge fan i att ändra i min profil *** ***** *********

KalleA
Posts: 424
Joined: 4 September 2003, 00:00
Location: stockholm

Post by KalleA » 27 March 2004, 23:42

Crontab -e kan itne ändra något eller lägga till där som root :(

arvid
Posts: 153
Joined: 26 March 2003, 07:20

Post by arvid » 28 March 2004, 20:17

KalleA wrote:Crontab -e kan itne ändra något eller lägga till där som root :(
Vad har du för variant av cron? Vet inte hur det skiljer sig, men crontab är bara för användare i vixiecron som jag har (tror jag). Roten har lite kataloger under /etc istället. Kolla om du har en katalog /etc/cron.daily eller liknande. Lägg en länk till ditt script i den katalogen. ln -s /path/till/script /etc/cron.daily/länknamn.

KalleA
Posts: 424
Joined: 4 September 2003, 00:00
Location: stockholm

Post by KalleA » 28 March 2004, 22:36

/etc/cron.daily
den vill ja ha så att de kör 0.00 och inte 04.00
hru ändrar jag de ?

User avatar
kjell-e
Posts: 2817
Joined: 21 December 2002, 16:27
Location: Linköping
Contact:

Post by kjell-e » 31 March 2004, 17:34

crontab -e kan normalt alla användare köra inklusive användaren root. Då läggs det upp en cronjobb för den aktuella användaren när du avslutar editorn. Om du inte vill starta "vi" bör du sätta variabeln EDITOR till någontinglämpligt först innan du gör crontab -e.
Exempel: export EDITOR=emacs

Nåja, om du nu vill ändra så att cron.daily körs vid midnatt får du ändra i filen /etc/crontab

På min burk står det:

Code: Select all

02 4 * * * root run-parts /etc/cron.daily
Vilket gör att de dagliga sakerna utförs 2 minuter över 4.

Första fältet är för minuter, andra fältet är för timmar, tredje fältet är för dag i månaden, fjärde fältet är för månad och femte fältet är för veckodag (måndag - söndag, eller söndag - lördag om man är amerikan).

Om du vill att det ska köras exakt vid midnatt ändra då till:

Code: Select all

0 0 * * * root run-parts /etc/cron.daily

RoBear71
Posts: 9
Joined: 17 March 2004, 17:40

Post by RoBear71 » 8 April 2004, 23:13

Hej.
En fråga bara...
Om jag vill att ett jobb ska utföras en gång varje timme, (exempelvis varje heltimme), ska jag då skriva så här?:

Code: Select all

0 * * * * /sök/väg
eller ?:

Code: Select all

0 */1 * * * /sök/väg
jag frågar för jag har fått många olika svar från andra som jag trott "kunnat" linux.... men inget fungerar... :(
därför försöker jag ta reda på om det är jag som gjort fel i det script som ska köras eller om det är fel i den delen som man skriver i crontab.

tyckte det var bättre att ta upp det här, eftersom andra som söker på crontab ändå kommer att få upp den här topicen...

arvid
Posts: 153
Joined: 26 March 2003, 07:20

Post by arvid » 8 April 2004, 23:44

RoBear71 wrote:Om jag vill att ett jobb ska utföras en gång varje timme, (exempelvis varje heltimme), ska jag då skriva så här?:

Code: Select all

0 * * * * /sök/väg
eller ?:

Code: Select all

0 */1 * * * /sök/väg
jag frågar för jag har fått många olika svar från andra som jag trott "kunnat" linux.... men inget fungerar... :(
därför försöker jag ta reda på om det är jag som gjort fel i det script som ska köras eller om det är fel i den delen som man skriver i crontab.
Det första sättet är det enklaste, men det andra borde fungera det också. Fungerar ditt script om du kör det från en terminal? Om du lägger ett annat, trivialt script i din crontab, körs det då när det ska?

RoBear71
Posts: 9
Joined: 17 March 2004, 17:40

Post by RoBear71 » 8 April 2004, 23:58

:oops:
jag hade inte dcron igång...

sorry för besväret... :oops:

amos
Posts: 64
Joined: 12 July 2002, 01:49

Post by amos » 9 April 2004, 09:23

Okay tackar hoppas de funkar får vänta drygt 11 timmar för att
se om de funkar
jag hoppas du skämtar...

User avatar
kjell-e
Posts: 2817
Joined: 21 December 2002, 16:27
Location: Linköping
Contact:

Post by kjell-e » 9 April 2004, 23:45

De två raderna gör samma sak.

Code: Select all

0 * * * * /sök/väg
och

Code: Select all

0 */1 * * * /sök/väg

*/1 betyder alla timmar jämnt delbara med 1 d.v.s. samma sak som * som betyder varje timma. Skriver du */3 i timfältet innebär det alla timmar som är jämnt delbara med 3.

Motsvarande gäller för övriga fält.

Tiderna som du ger i de 5 tidsfälten (se min tidigare beskrivning av dem) kan skrivas som enskilda tal, t.ex. 3, eller som serie tal (kommaseparerade) t.ex. 1,3,7,12 eller som ett intervall t.ex. 2-10 eller som steg (jämnt delbara enligt ovan) t.ex. */5 eller som alla *.

Om du vill ha ett cron-jobb som ska gå kl en minut över midnatt varje dag skriver du:

Code: Select all

1   0   *   *   *   programmet
Vill du ha någonting som ska köras var 5:e minut vid timmarna 1, 3,4,5,11,15 och 17 skriver du:

Code: Select all

*/5    1,3-5,11,15,17   *  *  *  programmet
Vill du ha någonting som ska köras kl 11,13,14,15 minuter över 10 respektive över 15 måndag till fredag, januari till juni (månaderna 1-6) och augusti till december (månaderna 8-12) blir det:

Code: Select all

11,13-15  10,15  *   1-6,8-12   1-5   programmet
Ska ditt cronjobb däremot köras t.ex. vid olika minutslag för de olika timmarna måste du lägga upp två separata rader i crontabfilen.


Sedan är det viktigt att du har ett radslut på den sista raden i crontabfilen. Utan den finns det en risk att cron inte kör sista raden i din crontab. Ett enkelt sätt att se till att det alltid är en radbrytning på sista raden som ska köras är att lägga in en kommantar på en rad efter den sista raden.

Code: Select all

# Slut på filen
Detta är hur det ska se ut när man kör crontab -e och lägger upp cronjobb som vanlig användare (eller som root). Med crontab -e får man en fil för varje användare som typiskt brukar ligga under /var/spool/cron.

I filen /etc/crontab finns ett extra fält för användarnamn som talar om vilken användare som cronjobben ska köras som.

RoBear71
Posts: 9
Joined: 17 March 2004, 17:40

Post by RoBear71 » 11 April 2004, 02:30

Tack för den lektionen... tyckte den var bättre än någon av de instruktioner jag har sett ang. crontab hittills... :)


Denna var nästan lite överkurs först när jag tittade....

Code: Select all

Vill du ha någonting som ska köras kl 11,13,14,15 minuter över 10 respektive över 15 måndag till fredag, januari till juni (månaderna 1-6) och augusti till december (månaderna 8-12) blir det: 
Kod: 

11,13-15  10,15  *   1-6,8-12   1-5   programmet 
men efter att ha läst igenom den ett par gånger var den ju enkel... jag tror jag har förstått den iaf... :)
känns lite genant att jag glömde att lägga in så crond startar i rätt runlevel bara.... :oops: svårt att få crontab att fungera annars..... :lol:

User avatar
kjell-e
Posts: 2817
Joined: 21 December 2002, 16:27
Location: Linköping
Contact:

Post by kjell-e » 12 April 2004, 23:10

Varsågod.

Jag har undervisat i Unix/Linux i ca 7 år och då brukar det bli en del cron också.

OErjan
Posts: 1834
Joined: 21 April 2003, 06:43
Location: 64*N 21*E

Post by OErjan » 13 April 2004, 19:50

helt otroligt, du klämde in i stort allt det man behöver veta på den lilla rutan.
jag är imponerad.
kanske jag är en av de sista människor som ser din gamla: bil, dator, gräsklippare...
efter mig är de så många kilo konfetti.

Post Reply