Vraag Handig een opdracht plannen om later uit te voeren?


Wat is een eenvoudige manier om een ​​opdracht uit te voeren, laten we zeggen, over 8 uur? Ik kan zo denken:

nohup bash -c "sleep 28800 ; ./mycommand.sh" &

Is er een meer "juiste" manier?


72
2017-08-30 11:25


oorsprong


Is er iets mis mee? nohup + sleep? Waarom is het "ongepast"? - cprn


antwoorden:


U kunt de at opdracht. De at voer op een later tijdstip opdrachten uit. De at hulpprogramma leest opdrachten uit standaardinvoer en groepeert deze samen als een at-job, om op een later tijdstip te worden uitgevoerd.

meestal at is standaard geïnstalleerd in Ubuntu, maar als je release het niet bevat, installeer dan via:

sudo apt-get install at

Zie voor meer informatie, opties, voorbeelden en andere de Ubuntu Manpage Repository

Voorbeeld:

at now +8 hours -f ~/myscript.sh

Je kunt ook handige korte beschrijving gebruiken, zoals tomorrow of noon, als in

echo "tweet fore" | at teatime 

Waarschuwing: Hiermee wordt het commando links van de pijp uitgevoerd per direct maar toon de uitvoer pas later. Het voorbeeld laat ook zien hoe u acties kunt pipen at. at -c is de manier waarop u geplande acties kunt bekijken, die u handig kunt vermelden met hun nummer, zoals met:

at -c 3

106
2017-08-30 11:39



Het kan handig zijn om een ​​eenvoudig gebruiksmodel toe te voegen dat meer specifiek de vraag van de originele poster behandelt. at now +8 hours -f ~/myscript.sh - steeldriver
Bovendien is dat zo at 8:00 om de opdracht op een absolute tijd uit te voeren, en batch voor "wanneer het lijkt alsof de computer niet actief is" - Simon Richter
In het geval iemand zich afvroeg, teatime is om zestien. Om sommige redenen wordt dit niet vermeld in manpages.ubuntu.com/manpages/raring/man1/at.1posix.html maar het is binnen man at en hier manpages.ubuntu.com/manpages/raring/en/man1/at.1.html. - Dan
Misschien kunnen we vermelden dat het hulpprogramma "at" niet standaard is geïnstalleerd en als iemand anders het wil krijgen, installeer dan gewoon het "at" -pakket? Bewerken: Hoe dan ook, ik heb gewoon het antwoord bewerkt (ook de manpage-link gerepareerd). - heartsmagic
Pas op voor dat bies in at voert het commando onmiddellijk uit en berekent alleen de output. Ik had een 4-uurs 3D-afdruk mislukt omdat ik wilde plannen gpio write 8 1 maar het werd meteen uitgevoerd. - Maciej Swic


Ja, u kunt een cron-taak instellen.

Bijvoorbeeld als nu de tijd 14:39:00 is en vandaag is vrijdag 30 augustus, kunt u de volgende cron-taak (die na 8 uur moet worden uitgevoerd) toevoegen aan uw crontab-bestand met behulp van crontab -e opdracht:

39 22 30 8 5  /path/to/mycommand.sh

Meer over:


9
2017-08-30 11:34



Oké, ja, ik had moeten vermelden dat ik weet van Cron-banen. Dit is zelfs rommeliger omdat het dan voor onbepaalde tijd in de crontab zit, toch? - Steve Bennett
@ RaduRădeanu: met cron, wees voorzichtig dat het binnen een paar jaar opnieuw kan vuren (wanneer er nog eens 30 augustus op vrijdag is) ... - Olivier Dulac
Dit is een slimme hack. Maar 'at' is een veel betere manier. Wat zou er gebeuren als de computer om 14:39 werd uitgeschakeld? - emory
Fout dat is nog steeds niet mijn punt. Mijn punt is dat de tekst die je hebt ingevoerd (denk ik) letterlijk nog steeds in je crontab zit na het evenement, waardoor je nog een opruimtaak krijgt. - Steve Bennett
@SteveBennett Ja, je hebt gelijk. Het commando blijft in uw crontab totdat je het verwijdert. Een jaar later, als je vergeten bent wie het daar heeft gestopt en waarom, zul je achter je hoofd krabben en je afvragen wat je met het bevel moet doen. - Paddy Landau


Gebruik de Gnome-gebaseerde GUI voor cron, at, en dergelijke:

De introductie van de CronHowto suggereert het gebruik van de gnome-schedule gui, wat veel leuker is dan alle rommel in de terminal te typen (vooral voor "gemiddelde" Ubuntu-gebruikers die geen "power" * nix / bsd-gebruikers zijn.)

Voer het uit met behulp van de Unity Dash (of een ander toepassingsmenu) om naar te zoeken Geplande taken of hardlopen gnome-schedule.

Over Gnome-gebaseerde Ubuntu-systemen Gnome Scheduled tasks tool (van het kabouter-schema   package) in Applications -> System Tools biedt een grafische interface met prompts   voor het gebruik van Cron. De projectwebsite is om http://gnome-schedule.sourceforge.net/; de   software is installeerbaar vanuit het Software Center of door te typen

sudo apt-get install gnome-schedule

in een terminal.

Gebruik makend van gnome-schedule, voor een script in je homedirectory zou een nieuw "at" commando worden ingesteld met dit type venster:

enter image description here


7
2017-07-16 19:20





Ik ontdekte een snelle en vieze manier om dit te doen voordat ik erachter kwam at was iets.

Stel dat u wilt dat uw script 's middags wordt uitgevoerd:

until [[ "$(date)" =~ "12:00:" ]]; do
    sleep 10
done
./mycommand.sh

Stel dat je wilt dat het morgenmiddag wordt uitgevoerd (vandaag is het 24 november voor mij):

until [[ "$(date)" =~ "25 12:00:" ]]; do 
    sleep 30
done
./mycommand.sh

3
2017-11-24 06:07



Aan de twee mensen die dit antwoord hebben verbeterd, gebruik alstublieft at, cronof een andere echte planner-applicatie. Taakplanning is moeilijk, en niet een wiel dat je opnieuw moet uitvinden. - dimo414
@ dimo414 Wat is er mis met mijn methode? - wjandrea
Het is in elk geval druk bezig, wat verspilling is. Erger nog, het is niet gegarandeerd dat het correct is; het is perfect mogelijk (indien onwaarschijnlijk) voor de voorwaardelijke om te worden gemist. Het is ook zeer foutgevoelig om uw planner op reguliere expressies te baseren. Het zou kunnen werken goed genoeg, maar heeft geen voordelen ten opzichte van at. - dimo414
(Terzijde: ik heb uw antwoord niet bijgesteld, ik denk niet dat mensen het moeten gebruiken) - dimo414
Nog een reden om te gebruiken at is omdat zijn taken een reboot overleven. - manatwork