Запуск простого сценария оболочки в качестве 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).

sudo apt-get install gnome-schedule 

Для KDE используйте kde-config-cron.

It should be pre installed on Kubuntu

Но если вы используете безголовый linux или не хотите GUI, вы можете использовать:

crontab -e

Если вы введете это в Terminal, вы´получите таблицу.
Теперь вы должны вставить свои cronjobs.
Отформатируйте задание следующим образом:

*     *     *     *     *  YOURCOMMAND
-     -     -     -     -
|     |     |     |     |
|     |     |     |     +----- Day in Week (0 to 7) (Sunday is 0 and 7)
|     |     |     +------- Month (1 to 12)
|     |     +--------- Day in Month (1 to 31)
|     +----------- Hour (0 to 23)
+------------- Minute (0 to 59)

Есть и шорткоды (если вам не нужны *):

@reboot --> only once at startup
@daily ---> once a day
@midnight --> once a day at midnight
@hourly --> once a hour
@weekly --> once a week
@monthly --> once a month
@annually --> once a year
@yearly --> once a year

Если вы хотите использовать шорткаты как cron (потому что они´не работают или так):

@daily --> 0 0 * * *
@midnight --> 0 0 * * *
@hourly --> 0 * * * *
@weekly --> 0 0 * * 0
@monthly --> 0 0 1 * *
@annually --> 0 0 1 1 *
@yearly --> 0 0 1 1 *
Комментарии (3)
Решение

В каком каталоге находится файл.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 в другом месте или не указывает абсолютный путь к файлу.

Комментарии (6)

Он также должен правильно запускаться в cron. Пожалуйста, проверьте следующие вещи.

1- Вы редактируете нужный файл для установки cron.

2- Вы дали скрипту соответствующее разрешение (разрешение на выполнение), что означает, что ваш скрипт является исполняемым.

Комментарии (0)