Publicatie:Command line tools automatiseren

Uit Cultureel Erfgoed Standaardentoolbox
Ga naar: navigatie, zoeken


Samenvatting

Deze handleiding is in opbouw

In het kader van het project Best practices voor de archivering van sociale media in Vlaanderen en Brussel werden verschillende command line tools getest om socialemediaplatformen te archiveren. Deze handleiding beschrijft hoe command line tools acties kunnen worden geautomatiseerd zoals bijvoorbeeld het archiveren van een sociaal media account om de zoveel tijd. Met het gebruik van taakplanner software zoals crontab, launchd etc.


Referentie
Titel Command line tools automatiseren (Voorkeurstitel)
Locatie
Uitgever
Jaar van uitgave 2021
Rechten CC-BY-SA
Persistent ID


Taakplanners zijn op elke systeem beschikbaar,Schtasks op Windows, Launchd op Mac Os en Crontab op Linux. Het is mogelijk om alle command line tools automatisch te starten met alle beschikbare opties die normaal gebruikt worden tijdens het manueel uitvoeren van een opdracht. Deze processen worden in de achtergrond uitgevoerd zonder interactie van de gebruiker.


Windows

Schtasks is standaard beschikbaar op windows.

Gebruik

Het uitvoeren van command line programmas met schtasks gebeurd aan de hand van een .bat script. Volledige documentatie is hier beschikbaar [MS-DOS and Windows command line schtasks command].

Nieuwe taak plannen

Open kladblok, en kopier en plak het volgende in een leeg kladblok document:
@ECHO OFF

PAUSE
EXIT

Plaats je commando op lijn 2, tussen "@ECHO OFF" en "PAUSE". Bijvoorbeeld:
@ECHO OFF
youtube-dl -f best https://www.youtube.com/channel/UCM2SO69PhFRKKEYwGSV4sHQ
PAUSE
EXIT

Bat script creatie.png

Belangrijk, slaag het bestand op als een .bat bestand. Verander de naam en typ manueel ".bat" als extensie.

Script bestand opslaan.png

Klik vervolgens op "Opslaan/Save".

Open het Windows start menu en typ "Powershell", selecteer "Run as Administrator" druk vervolgens op enter.

Powershell openen als administrator.png

In het "User Account Control" dialoog venster, selecteer "yes".

Voorbeelden:

Dagelijkse uitvoeren van een download van een youtube kanaal met youtube-dl.

schtasks /CREATE /TN yt-dl /TR "C:\Users\lode_\Documents\MEEMOO\Scripts\youtube-dl-basic.bat" /SC DAILY /ST UU:MM

  • schtasks: Naam van de taakplanner tool op Windows.
  • /CREATE: "Create"/Maak een nieuwe taak. Vervang door /DELETE om de taak te verwijderen.
  • /TN: "Taskname", de naam van de geplande taak.
  • /TR: "Taskrun", /TR, moet gevolgd worden door een pad naar een programma of script.
  • /SC: "Schedule", /SC, specifieerd de frequentie van de taak. Aanvaarde types zijn, MINUTE, HOURLY, DAILY, WEEKLY, MONTHLY, ONCE, ONSTART, ONLOGON, ONIDLE, ONEVENT.
  • /ST: "Starttime", /ST, De taak zal altijd op dezelfde dag op de gekozen tijd starten. /ST Verwacht een uur en minuten tijdsformaat (24:00), bijvoorbeeld, 14:44, 16:05, 00:20.

Kopier en plak je schtasks commando in de powershell.

Schtasks create task.png

Je dient de volgende respons terug te krijgen.

Schtasks repsons task created successfully.png

Geplande taak aanpassen

Pas je schtasks taak aan en gebruik de juiste taaknaam (/TN yt-dl) om te verwijzen naar de eerder geplande taak en druk op enter. Als de taak als bestaat vraagt schtasks je om de aanpassing te bevestigen.

klik op de thumbnail













Geplande taak verwijderen

Gebruik de /DELETE optie om de geplande taak te verwijderen verwijs naar de exacte taak naam met /TN. Druk vervolgens op enter. Bevestig met "y" of "n" om de geplande taak te verwijderen. Voorbeeld: schtasks /DELETE /TN yt-dl


Mac Os

Launchd is de command line taakplanner ter vervanging van crontab. Launchd maakt een onderscheid tussen taken's die worden uitgevoerd namens de gebruiker, "agents" en "daemons" die uitgevoerd worden namens de root gebruiker of een andere gebruiker aan de hand van "UserName" key. Documentatie:


Gebruik

Taken worden gepland aan de hand van launchd .plist configuratie bestanden en een bash script. In plist bestand dient verwezen te worden naar een bash script. In het bash script staat het commando dat moet geautomatiseerd worden.

Kies de juiste map voor de geplande taak.

/Library/LaunchDaemons:Plaats het plist bestand in deze map als de taak moet starten zelfs wanneer er geen gebruiker is ingelogd.

/Library/LaunchAgents:Plaats het plist bestand in deze map wanneer de taak enkel moet starten wanneer er gebruikers zijn ingelogd op het systeem.

/$HOME/Library/LaunchAgents/: Plist bestanden in deze map worden uitgevoerd onder namens de ingelogde gebruiker. Dit is de folder die zal gebruikt worden voor deze handleiding.

De eerste twee mappen hebben administrator rechten nodig om de plist bestanden te bewerken. Voor de gemakkelijkheid zal voor deze handleiding de derde mapg gebruikt worden, alle voorbeelden gaan er van uit dat de plist bestanden in /$HOME/Library/LaunchAgents/ geplaatst zijn.

Bash script maken

Elk commando dat in de terminal/command line interface kan worden uitgevoerd kan opgeslagen worden als uitvoerbaar bestand of een script. Een bash script is een tekstbestand met verschillende commando's en een mogelijkheid om logica en condities toe te voegen. MacOs en Linux zijn op vlak van besturingssysteem familie van elkaar en gebruiken allebei de bash shell. Scripts worden opgeslagen met de ".sh" extensie. Bash scripts, beginnen op macOS met de shebang, "#!/bin/bash", de "#!" verteld het systeem dat het tekstbestand een script is en /bin/bash is de locatie van bash, dit geeft aan hoe het systeem het script moet interpreteren, met bash.

Screenshot locatie bash binary.png

Plaats je commando onder "#!/bin/bash".

Zoals dit:
#!/bin/bash
instaloader --fast-update profile kbrbe

Open teksteditor, kopier en plak de shebang (#!/bin/bash) op de eerste lijn. Plaats je commando onder de shebang. Slaag je tekstbestand op. Verander na het opslaang de extensie van het tekstdocument naar .sh.

Aanpassen tekstbestand met sh extensie.png

Klik op "Use .sh".

Tekstbestand extensie aanpassen bevestigen macos.png

Het bestand zou nu de .sh extensie moeten hebben.

plist maken

Een xml bestand genaamd "property list" of kortweg plist. Dat gebruikt wordt om de taak de gewenste eigenschappen te geven zoals wanneer in de dag/week/maand moet de taak starten. De handleiding van launchd beschrijft plist bestanden als systeem en gebruiker specifieke daemon/agent configuratie bestanden. Gebruik het voorbeeld hieronder als start. Of gebruik de website, http://launched.zerowidth.com/ om je plist te genereren.

Voorbeeld van een plist bestand waarbij de taak maandag (Weekday 1), woensdag (Weekday 3) en vrijdag (Weekday 5) gestart wordt om 10 uur in de ochtend, elke maand.

Het eerste gedeelte Blijft altijd hetzelfde.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">

Alle andere informatie, Label, ProgramArguments etc. komen tussen de <plist version="1.0"> ... </plist> en <dict> ... </dict> tags te staan.

<key>Label</key>, dient om de taak een naam te geven, in dit geval com.kbrbe.instaloader

De tag, <key>ProgramArguments</key> duid de plaats aan in de plist waar er verwezen kan worden naar een bash script. Zet de locatie van het script tussen <array> ... <string>/pad/naar/script/</string> ... </array> tags.

<key>StartCalendarInterval</key>, wordt gebruikt om de start tijd aan te geven. De beschikbare opties zijn:

Key Type Values
Month Integer Month of year (1..12, 1 being January)
Day Integer Day of month (1..31)
Weekday Integer Day of week (0..7, 0 and 7 being Sunday)
Hour Integer Hour of day (0..23)
Minute Integer Minute of hour (0..59)


Gebruik <key>WorkingDirectory</key> <string>pad naar werk map</string> Om een map op de computer te specifieren waar bestanden dienen opgeslagen te worden. Wanneer er geen map opgegeven wordt onder de tag "WorkingDirectory" komen de bestanden in de [root folder] terecht.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>com.kbrbe.instaloader</string>
	<key>ProgramArguments</key>
	<array>
		<string>$HOME/Desktop/instaloader_kbr.sh</string>
	</array>
	<key>StartCalendarInterval</key>
	<array>
		<dict>
			<key>Hour</key>
			<integer>10</integer>
			<key>Weekday</key>
			<integer>1</integer>
		</dict>
		<dict>
			<key>Hour</key>
			<integer>10</integer>
			<key>Weekday</key>
			<integer>3</integer>
		</dict>
		<dict>
			<key>Hour</key>
			<integer>10</integer>
			<key>Weekday</key>
			<integer>5</integer>
		</dict>
	</array>
	<key>WorkingDirectory</key>
	<string>$HOME/Documents/launchd/instaloader/</string>
</dict>
</plist>

Nieuwe taak plannen

Linux

Crontab