Мой кронтаб:
* * * * * ~/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).