Запуск простой оболочки 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
, но он не запускает скрипты.
Ответы
Ответ 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 является исполняемым.