Під час cron
запуску події вона використовує середовище оболонки за замовчуванням запущеного UID. Однак не застосовується жодна настройка "профілю", тобто ваш .bash_profile
ресурс не отримується, і жодні налаштування PATH не підбираються. Крім того, я не вірю, що загальні профілі теж не підібрані. Таким чином , ви , ймовірно, немає PATH
або LD_LIBRARY_PATH
параметрів середовища , доступних для процесу , який ви намагаєтеся запустити , і саме тому pdfimages
і gs
не підхопив за замовчуванням.
Раніше я вирішував це один із двох способів:
- Безпосередньо посилайтеся на повний шлях потрібного мені файлу.
- Створіть сценарій оболонки для обгортки.
Я, як правило, віддаю перевагу другому, оскільки він не тільки дозволяє мені створити середовище для роботи, яку потрібно запускати, але це також дозволяє досить легко додавати ситуації налагодження легко. Наприклад, якщо робота не працює належним чином, я можу просто відредагувати скрипт оболонки і ввести STDOUT
перенаправлення на файл налагодження.
Отже, коротше кажучи, я мав би записатись у крон
* 6 * * * cd /path/to/ && ./executable.sh
.. який міняв би шлях, але executable.sh
зробив би все export PATH
, export LD_LIBRARY_PATH
і т.д., щоб налаштувати свою роботу.
Ваш зразок executable.sh
може бути таким же простим:
#!/bin/bash
# if you want to just pick up your profile, you can '.' source it
. ~/.bash_profile
export PATH=/where/i/find/gs
export LD_LIBRARY_PATH=/if/i/need/libs
(./executable 2&>1) >executable.out
executable.out
Перенаправлення файл не є необхідним , так як без неї все STDOUT
йде до cron.out
, але він робить це трохи чистіше , щоб зробити це таким чином. Також 2>&1
дурниці з дужками переконайтесь, що обидва STDERR
і STDOUT
внести їх у вихідний файл; це допомагає налагодити, чому робота не виконувалася.
pdfimages
таgs
у свій сценарій.