Sie können Wine nicht mit Crontab ausführen?

Sie können Wine nicht mit Crontab ausführen?

Meine Crontab:

* * * * * ~/d2gs.sh

Meine Bewerbung:

#!/bin/sh

#
# D2GS
#

# Go to the directory
cd ~

# Run the applications
if ! ps aux | pgrep "D2GS"; then
    wine "C:/D2GS/D2GS.exe" > /dev/null 2>&1 &
fi

Die Crontab startet den Prozess nicht. Das ist seltsam, da ich ~/d2gs.sh manuell erfolgreich ausführen kann.

Antwort1

Sie müssen unterscheiden zwischen „die Crontab startet den Prozess nicht“ und „der Prozess startet zwar, tut aber nicht, was er soll“. Und stellen Sie sicher, dass die Datei ausführbar ist.

Anders als vermutet stellt die Verwendung von ~in crontabkein Problem dar. Der komplette Kommandostring wird an eine Shell übergeben.

Antwort2

Das cd ~funktioniert möglicherweise nicht (daTilde-Erweiterungist nicht universell). Bevorzugen Sie cd $HOMEes (das garantiert für alle Implementierungen von ... dasselbe tut /bin/sh) ..... Denken Sie daran, dass POSIX sh(oder /bin/sh) im Allgemeinennicht bash(und Ihr System /bin/shist möglicherweise nicht vollständig POSIX-kompatibel, sondern eher „Bourne“-ähnlich)!

Natürlich können Sie pwd > /dev/stderrIhrem Skript etwas wie hinzufügen (zu Debugging-Zwecken).

winebraucht im Allgemeinen eineX11Server, um Fenster anzuzeigen. Und ein Programm, das von croneinem X11-Server oder Terminal gestartet wird, funktioniert im Allgemeinen nicht. Daher winekann es wahrscheinlich nicht gestartet werden (von Ihrem cronJob aus). Möglicherweise müssen Sie eine DISPLAY Variable fürXlib. Sie können aber auch Xvfb verwenden, sieheHier.

Zu guter Letzt,pgrep(1)ist ein Scanvorgang. Entweder verwenden ps aux | grep "D2GS"oder die Verwendung pgrep selbst erlernen.

Ich empfehle die Verwendung echo something > /dev/stderroder besser echooderdrucken(1)(mit einem geeignetenUmleitung) oderlogger(1)in Ihrem Skript, zumindest zu Debugzwecken (an mehreren Stellen).

Und ich werde wine-s stderr und stdout /dev/nullzumindest während der Debugging-Phase nicht umleiten. Kannst du nicht programmieren (zumindestvorübergehendwährend des Debuggens) wine "C:/D2GS/D2GS.exe" >> /tmp/wine.out 2>&1und untersuchen Sie es /tmp/wine.out mit einem Pager wie less?

Ihr cron(und Ihr Shell-Skript) verwendet nicht Ihre interaktivePATHVariableSie sollten erwägen, esausdrücklichin Ihrem Skript (oder crontab). SieheUmgebung(7).

verwandte Informationen