Я записал немного утилиты в haXe + Neko, который должен выполнить некоторые команды МЕРЗАВЦА. Для предотвращения жесткого кодирования путь к исполняемому файлу МЕРЗАВЦА, я хотел бы использовать, которые управляют для обнаружения, где это. Все работает как ожидалось при выполнении вручную от консоли, но не когда выполнение приложения на задании крона.
Я знаю об ограниченной среде (здесь или здесь), когда Вы запускаете скрипт с помощью крона, но все еще удивили, это не работает:
/usr/bin/which git >> /home/user/git.txt
Текстовый файл создается, но содержание пусто. Снова, когда выполнено от консоли это работает как ожидалось.
Какие-либо идеи? Я выполняю Leopard OS X, если это помогает.
Спасибо:)
Juan
Если, 'который' мог бы найти исполняемый файл, то так мог интерпретатор оболочки, который выполняет Вашу команду крона. Таким образом, я не вижу, почему Вы хотели бы использовать 'который' с этой целью. Но возможно у Вас есть некоторая причина, которая не очевидна.
То, 'которые' управляют, использует каталоги, перечисленные в $PATH для поиска 1-го возникновения команды. Вероятный ПУТЬ не установлен к тому, что Вы думаете, что это. Попытайтесь добавить '/usr/bin/env>> /home/user/you/env.txt' к Вашему crontab для выполнения сегодня, одна минута с этого времени. Затем посмотрите в /home/user/you/env.txt для наблюдения то, к чему был установлен ПУТЬ. Если тот ПУТЬ не подходит в Ваших целях, Вам, вероятно, придется поместить все Ваши команды в маленький сценарий оболочки, где можно установить ПУТЬ сами. Можно также посмотреть в том, что файл env.txt для других экспортируемых переменных окружения, поскольку это могло бы пригодиться, в зависимости от того, что Вы хотите сделать через свой crontab.
Где мерзавец на самом деле расположен (т.е. если Вы работаете /usr/bin/which git
от консоли, что это печатает)? Если это не находится в каталоге в $PATH (который является просто/usr/bin и / мусорное ведро на моей машине Snow Leopard), /usr/bin/which
не найдет его, и Вы должны или hardcode это или добавляете строку как
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
в crontab файл.
Это добилось бы цели?
/usr/bin/env git
Огибающая команда заботится о нахождении команды и находится самостоятельно всегда в/usr/bin (таким образом, мне сказали...), Это - общий прием в сценариях Python, необходимых из-за другого Python помещения дистрибутива в различных местах, но никто не хочет обезьяне вокруг попытки найти где.