Vandaag weer een paar uur van mijn leven kwijt aan het vinden van een oplossing die, achteraf, heel erg simpel blijkt te zijn. Het lukte mij maar niet om middels een cronjob een script te laten draaien dat ik had geschreven. Het script was erg simpel en bestond uit een paar simpele commando’s die je normaal in de terminal zou uitvoeren. Om problemen te voorkomen had ik al absolute paths gebruikt om issues voor te blijven. Ook had ik de “Hash-Bang” of “She-Bang” netjes ingevoerd in het script. Maar het mocht maar niet baten.
Als oplossing worden de volgende stappen genoemd:
– Maak gebruik van absolute paden
– Maak gebruik van de Hash-bang of She-bang (#!/bin/bash als eerste regel in je script zetten)
– Zorg ervoor dat het script op “executable” staat (chmod +x script.sh)
– Zorg ervoor dat de resultaten / log van het script wordt weggeschreven naar een log-bestandje (> pad/naar/log/log.txt 2>&1)
– Zorg ervoor dat het script niet eindigt met een lege regel (baadt het niet… schaden zal het ook niet)
Als je al deze stappen al hebt geprobeerd en het nog steeds niet lukt en je hebt een Dedicated Server met Plesk hoger dan versie 10.1 op een Linux machine (Ubuntu bijvoorbeeld) dan zou het kunnen zijn dat je last hebt van het feit dat Plesk het standaard niet meer toe laat om scripts uit te voeren in de shell. Op zich erg logisch, zeker op een server waarbij meerdere gebruikers toegang hebben tot Plesk en zelf cronjobs toe te voegen, maar als je de enige user bent of andere users maken geen gebruik van Plesk, dan is de meest eenvoudige oplossing om deze rechten terug te zetten. Dit doe je door in de shell het volgende commando uit te voeren:
/usr/local/psa/bin/server_pref -u -crontab-secure-shell "/bin/sh"
Probeer het nu nog eens, en ohja, zet je cronjob 5 minuten na je huidige tijd, dan hoef je niet zo lang te wachten om te kijken of het goed gaat. De cronjob ziet er ongeveer zo uit:
/bin/bash /pad/naar/script/voorbeeld.bsh > /pad/naar/log/log.txt 2>&1
PS. Uiteindelijk heb ik de Hash-Bang / She-Bang weggehaald uit voorbeeld.bsh omdat deze geen functie leek te hebben.