Некоторые команды, не работающие в скрипте, запущенном из crontab-e

#bash #npm #cron #sudo

Вопрос:

Я запускаю скрипт из crontab, в котором я хочу установить символическую ссылку для npx . Он выполняет некоторые другие действия, которые зависят от самой npx команды. Он запускает сценарий, как и ожидалось, на заданном временном интервале, но не дает мне никакого результата для команды which npx или whereis npx . Когда я пытаюсь запустить скрипт непосредственно из терминала, эти команды генерируют правильный путь. Обратите внимание, crontab что я использую привилегию пользователя root, т. Е. устанавливаю sudo crontab -e и проверяю с echo помощью ing whoami внутри скрипта, который генерирует «root»)

Комментарии:

1. Где это npx ? По умолчанию задания cron выполняются с очень минимальным PATH (обычно просто /usr/bin:/bin ), и если его нет в одном из каталогов в этом, which вы его не найдете ( whereis немного отличается, но может возникнуть аналогичная проблема).

2. Привет Гордон, NPX-это исполнитель, который поставляется с npm, что вы подразумеваете под минимальным ПУТЕМ… разве этот скрипт не работает в той же среде…так как я могу указать правильный путь npx (с which npx ) при запуске сценария вручную, спасибо !

3. У вас есть $HOME/.profile или $HOME/.bash_rc где ваш путь изменился? Сначала попробуйте найти этот файл.

4. задания cron выполняются не в обычной среде; см. Этот вопрос и ответ . Кроме того, имейте в виду, что среда, в которой он находится, принадлежит root, а не вам.

Ответ №1:

По умолчанию crontab будет запускать ваши задания cron, используя sh которые, возможно, вы не получаете результатов.

Попробуйте явно изменить оболочку на оболочку по умолчанию, изменив запись crontab:

*/30 * * * * /bin/bash -c "/my_script.sh"

В этом случае я изменил его на bash, вы можете изменить его на нужную вам оболочку.

Комментарии:

1. Привет, Шачар, да, я пробовал это, но не смог получить ожидаемого результата, crontab не выдает результатов which npx , пока скрипт запускается вручную (под корневым доступом), спасибо!

2. Быстрым решением было бы указать полный путь, однако вы можете просто настроить переменную среды PATH для своего сценария.