Enstaka schemalagda händelser

Permalänk
Medlem

Enstaka schemalagda händelser

Hej!

Jag tänkte höra om ni har något bra förslag på hur man kan utföra enstaka schemalagda händelser? Alltså inte återkommande (vilket cron passar bra till). Självklart kan man ju lägga till och ta bort saker i cron. Ett alternativ skulle kunna vara att cron kollar en annan fil kontinuerligt som styr dessa enstaka schemalagda händelser.

Några förslag?

Hittade detta:

at -f script 08:00

Får det dock inte att fungera. Jobben listas men verkar inte utföras. Sitter och labbar på en FreeBSD maskin och min macbook pro (osx)

Permalänk
Medlem

Körs at som en användare med rättighetsproblem?
Prova kör scriptet manuellt först och se om det är ok.
Prova med mail-output från at så kanske du ser problemet.

Scriptet kanske körs med fel shell?, prova lägg på en shebang line i början.
typ #!/bin/sh eller #!/bin/bash

Kan prova med något simpelt först också, tex
touch ~/testfil | at 08:00
Kolla sedan om filen testfil skapades i hemmappen.

Permalänk
Hedersmedlem
Skrivet av WarWolf.667:

touch ~/testfil | at 08:00

Typo; behöver ha exempelvis:

echo 'touch ~/testfil' | at 08:00

Annars körs `touch` direkt, och `at` gör ingenting.

Jag tror också felet ligger i skriptet eller omgivningen, och inte `at`, som är den korrekta lösningen.

Om vi har ett skript `test.sh` med innehåll:

#!/bin/bash echo $SHELL $0 > testoutput

och kör

at -f ./test.sh 09:00

så kommer `testoutput` likväl innehålla:

sh

Skriptet körs alltså som om man kallat det med `sh` som explicit tolk, typ `sh ./test.sh`. Detta kan vara oväntat måhända, men tanken med `-f` är att man ska ange en fil som i sig innehåller batchkommandon, rad per rad, som `at` ska köra som exekverbara filer: filen man anger med `-f` är inte själva skriptet man vill köra.

En alternativ syntax som i stället faktiskt lägger till själva skriptet som det `at` kör är den som visades ovan, så exempelvis:

echo ./test.sh | at 09:00

ger `testoutput`:

/bin/bash ./test.sh

Så, när du anger en fil med `-f` så är det tänkt att vara en lista med skript du vill utföra vid den angivna tidpunkten. Om du exempelvis skapar en fil `testbatch` med innehåll:

./test.sh

och laddar den med

at -f testbatch 09:00

så kommer du få samma output som i sista fallet:

/bin/bash ./test.sh

Återigen (för tredje gången tror jag, men det är en vanlig fint, så jag pressar på lite extra ): `-f` ska ange en "jobbfil", dvs en fil som listar de skript man vill köra, och den tolkas med `/bin/sh` oavsett vad. `-f` ska inte ange själva skriptet man vill köra. Ifall skriptet är just ett POSIX-standard shell script så går det i praktiken lika bra ändå, men man behöver veta skillnaden för att hantera andra fall.

Permalänk
Medlem

Oj var ett tag sen jag körde några at-jobb (tyligen) -f var en jobbfil och inte script alltså.
Måste nog sätta mig ner någon dag och färska upp minnet

Permalänk

Om det är ett shell-script, schemalägg med cron, lägg till en rad i slutet av scriptet som tar bort det från cron.