Не получается запустить Wine с помощью crontab?

Не получается запустить Wine с помощью crontab?

Мой кронтаб:

* * * * * ~/d2gs.sh

Мое заявление:

#!/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

Crontab не запускает процесс. Что странно, так как я могу успешно запустить ~/d2gs.sh вручную.

решение1

Вам нужно различать «crontab не запускает процесс» и «процесс запускается, но не делает то, что должен». И убедитесь, что файл является исполняемым.

В отличие от того, что я предполагал, использование ~in crontabне является проблемой. Вся строка команды передается в оболочку.

решение2

Это cd ~может не сработать (посколькурасширение тильдыне является универсальным). Предпочтите cd $HOMEего (который гарантированно сделает то же самое для всех реализаций /bin/sh...) ..... Помните, что POSIX sh(или /bin/sh) обычнонет bash(и ваш, /bin/shвозможно, не полностью совместим с POSIX, но больше похож на «Bourne»)!

Конечно, вы можете добавить что-то подобное pwd > /dev/stderrв свой скрипт (в целях отладки).

wineкак правило, нуждается вХ11сервер для отображения окон. И программа, запущенная с, cronкак правило, не имеет сервера X11 или терминала. Так что wine, вероятно, не запускается (с вашего cronзадания). Вам может потребоваться установить некоторую DISPLAY переменную дляXlib. Но вы можете использовать Xvfb, см.здесь.

Наконец,пгреп(1)сканирует процессы. Либо используйте ps aux | grep "D2GS", либо научитесь использовать pgrep самостоятельно.

Я рекомендую использовать echo something > /dev/stderrили лучше echoилипринтф(1)(с подходящимперенаправление) илирегистратор(1)в вашем скрипте, по крайней мере, в целях отладки (в нескольких местах).

И я не буду перенаправлять wine-s stderr и stdout по /dev/nullкрайней мере на этапе отладки. Не можете ли вы закодировать (по крайней меревременново время отладки) wine "C:/D2GS/D2GS.exe" >> /tmp/wine.out 2>&1и посмотрите /tmp/wine.out с помощью какого-нибудь пейджера, например less?

Вы cron(и ваш скрипт оболочки) не используете интерактивныйPATHпеременная. Вам следует рассмотреть возможность его установки.явнов вашем сценарии (или crontab). Смотритеокружающая среда(7).

Связанный контент