Під час 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у свій сценарій.