Запуск простого сценария оболочки в качестве cronjob
У меня есть очень простой shell-скрипт, который нужно запускать как cronjob, но я не могу добиться запуска даже тестовых скриптов. Вот пример скрипта:
/home/myUser/scripts/test.sh
#!/bin/bash
touch file.txt
кронтаб:
* * * * * /home/myUser/scripts/test.sh
Скрипт отлично запускается из терминала, но я не могу заставить его работать как cronjob. До сих пор я пробовал следующее в crontab:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * /bin/bash /home/myUser/scripts/test.sh
И это в файле скрипта:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/myUser/scripts
Из того, что я понял, решение может быть в переменной PATH, но я не могу понять, что это такое, поскольку мое понимание очень ограничено на данный момент. Итак, мой вопрос в том, как мне заставить мои скрипты запускаться как cronjobs?
EDIT: файл имеет права rwx для всех пользователей. Это просто для тестирования.
EDIT: cronjobs, такие как * * * * * touch /home/myUser/scripts/test.txt
работают, но они не запускают скрипты.
Самым простым способом было бы использование графического интерфейса пользователя:
Для Gnome используйте gnome-schedule (universe).
Для KDE используйте kde-config-cron.
Но если вы используете безголовый linux или не хотите GUI, вы можете использовать:
Если вы введете это в Terminal, вы´получите таблицу.
Теперь вы должны вставить свои cronjobs.
Отформатируйте задание следующим образом:
Есть и шорткоды (если вам не нужны *):
Если вы хотите использовать шорткаты как cron (потому что они´не работают или так):
В каком каталоге находится файл.txt? cron запускает задания в вашем домашнем каталоге, поэтому, если ваш скрипт не загрузился в другом месте, он будет искать/создавать файл.txt именно там.
EDIT: Когда вы ссылаетесь на файл без указания полного пути к нему (например,
file.txt
, в отличие от полного пути/home/myUser/scripts/file.txt
) в shell, считается, что вы ссылаетесь на файл в вашем текущем рабочем каталоге. Когда вы запускаете сценарий (интерактивно или через crontab), рабочий каталог сценария не имеет никакого отношения к местоположению самого сценария; вместо этого он наследуется от того, что запустило сценарий.Таким образом, если вы
cd
(измените рабочий каталог) в каталог, в котором находится скрипт, а затем запустите его,file.txt
будет ссылаться на файл в том же каталоге, что и скрипт. Но если вы сначала не перейдете вcd
, тоfile.txt
будет ссылаться на файл в той директории, в которой вы находились в момент запуска скрипта. Например, если ваш домашний каталог - /home/myUser, и вы открываете новый shell и сразу запускаете скрипт (какscripts/test.sh
или/home/myUser/scripts/test.sh
;./test.sh
не работает), он обратится к файлу /home/myUser/file.txt, потому что /home/myUser - ваш текущий рабочий каталог (а значит, и скрипт).Когда вы запускаете скрипт из
cron
, он делает по сути то же самое: он запускает его с рабочим каталогом, установленным на ваш домашний каталог. Таким образом, все ссылки на файлы в скрипте берутся относительно вашего домашнего каталога, если только скрипт неcd
в другом месте или не указывает абсолютный путь к файлу.Он также должен правильно запускаться в cron. Пожалуйста, проверьте следующие вещи.
1- Вы редактируете нужный файл для установки cron.
2- Вы дали скрипту соответствующее разрешение (разрешение на выполнение), что означает, что ваш скрипт является исполняемым.