Подтвердить что ты не робот

Запуск простой оболочки script как cronjob

У меня очень простая оболочка script Мне нужно запускать как cronjob, но я не могу получить даже тестовые скрипты для запуска. Здесь и пример script:

/home/myUser/scripts/test.sh

#!/bin/bash
touch file.txt

кронтаб:

* * * * * /home/myUser/scripts/test.sh

script отлично работает с терминалом, но не может заставить его работать как 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

И это в файле script:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/myUser/scripts

Из того, что я собрал, решение может быть в переменной PATH, но я не могу понять, что это такое, так как мое понимание очень ограничено на данный момент. Поэтому мой вопрос: как мне заставить мои скрипты работать как cronjobs?

EDIT: у файла есть разрешения rwx для всех пользователей. Это только для целей тестирования.

EDIT: работают cronjob, такие как * * * * * touch /home/myUser/scripts/test.txt, но он не запускает скрипты.

4b9b3361

Ответ 1

В каком каталоге находится файл .txt? cron запускает задания в вашем домашнем каталоге, поэтому, если ваш script cd где-то еще, то где он будет искать/создавать файл .txt.

EDIT: когда вы ссылаетесь на файл без указания его полного пути (например, file.txt, а не полного пути /home/myUser/scripts/file.txt) в оболочке, он решил, что вы ссылаетесь на файл в текущем рабочем каталоге, Когда вы запускаете script (будь то интерактивно или через crontab), рабочий каталог script не имеет ничего общего с расположением самого script; вместо этого он унаследовал от того, что запускалось script.

Таким образом, если вы cd (смените рабочий каталог) на каталог script и запустите его, file.txt будет ссылаться на файл в том же каталоге, что и script. Но если вы не cd, сначала file.txt будет ссылаться на файл в любой директории, в которой вы оказались, когда вы запустили script. Например, если ваш домашний каталог /home/myUser, и вы открываете новую оболочку и сразу запускаете script (как scripts/test.sh или /home/myUser/scripts/test.sh; ./test.sh не будет работать), он коснется файл /home/myUser/file.txt, потому что /home/myUser - это ваш текущий рабочий каталог (и, следовательно, script).

Когда вы запускаете script из cron, он делает практически то же самое: он запускает его с рабочим каталогом, установленным в ваш домашний каталог. Таким образом, все ссылки на файлы в script берутся относительно вашего домашнего каталога, если только script cd в другом месте или не указывает абсолютный путь к файлу.

Ответ 2

Самый простой способ - использовать графический интерфейс:

Для использования 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

Если вы введете его в терминал, вы получите таблицу.
Теперь вы должны вставить свои 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

Попробуйте,

 # cat test.sh
 #!/bin/bash
 /bin/touch file.txt

cron as:

 * * * * * /bin/sh /home/myUser/scripts/test.sh

И вы можете подтвердить это:

 # tailf /var/log/cron

Ответ 4

Он должен работать правильно и в cron. Пожалуйста, проверьте ниже.

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

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