2016-01-18 5 views
4

Я новичок в Linux, и я некоторое время боролся с этой проблемой в моей малине Pi и не имел успеха.Crontab in Raspberry pi не запускает очень простой скрипт

Сначала я написал простой скрипт в /home/myfile.sh так:

#!/bin/bash 
clear 
echo "hi" 

Тогда я сделал sudo chmod 755 /home/myfile.sh предоставления разрешений.

И, наконец, я изменил crontab с помощью crontab -e:

# some comments ... 
* * * * * /home/myfile.sh 

Проблема:

Когда я запускаю скрипт вручную он работает нормально, но когда я ставлю выше линии в моей crontab, ничего когда-либо случается. Что я делаю не так?

+0

Строка crontab неверна, посмотрите здесь https://en.wikipedia.org/wiki/Cron. Вы должны добавить время исполнения – bdn02

+0

не означает * * * * * означает каждую минуту? –

+0

@ bdn02 Я проверил ссылку на wikipedia и другие документы, но моя строка corntab кажется правильной, не могли бы вы рассказать о том, что именно не так с моим кодом? –

ответ

1

Для того, чтобы показать, как мне удалось решить мою проблему с надеждой на помощь другим, вот я его в ответ на мой собственный вопрос:

меня вокруг проблемы с помощью общесистемного кронтаб (/etc/crontab) вместо на пользователя crontab (crontab -e).

Чтобы уточнить это,

/etc/crontab является общесистемного кронтаб.

Формат /etc/crontab, как это:

# m h dom mon dow user  command 
* * * * * someuser echo 'foo' 

в то время как crontab -e является для каждого пользователя 'кронтаб.

Формат crontab -e как это:

# m h dom mon dow command 
* * * * * echo 'foo' 

Обратите внимание на каждый пользователя кронтаба нет поля «пользователя».

1

Работы Cron возвращают stdout и stderr по электронной почте по умолчанию, поэтому вам нужно проверить там свой тест.

В стандартном raspian распределения есть не почтовый клиент/агент, поэтому вам нужно установить его, например:

sudo aptitude install bsd-mailx 

и чем вы будете иметь возможность проверить для локальных сообщений электронной почты с помощью команды mail.

Обычно задания cron не возвращают никакого выхода, перенаправляя все это в файл журнала.

+0

Я видел [сообщения] http://stackoverflow.com/a/5398044/1648849), где вы можете использовать crontab для планирования запущенных программ. ваш ответ означает, что он предназначен только для отправки по электронной почте результатов? или я неправильно понял? –

+0

Я имею в виду, что с учетом вашего (правильного) crontab вы получите вывод, содержащий «hi», в виде локального письма для пользователя, который его создал. Никаких дальнейших действий не требуется на вашей стороне, это стандартное поведение работы cron. Вы можете запускать программы в crontab, и их вывод сообщается по электронной почте, если не перенаправлен. – Sigismondo

+0

однако задание не сможет взаимодействовать (очистить) tty (сеанс терминала), к которому вы подключены: программа запускается в независимом сеансе пакетной обработки. – Sigismondo

4

Try перенаправлять вывод в файл, как это:

* * * * * /home/myfile.sh > output_file.txt 

, и вы увидите, что он работает.

Задачи Cron не выводятся на тот же терминал, который вы используете.


Редактировать

Если вы используете crontab -e для заданий планирования, вы используете конкретный кронтаб пользователя. Таким образом, вы можете писать только в домашний каталог этого пользователя (или другие каталоги, к которым у него есть доступ). Так что если вы измените вам хроны на:

* * * * * /home/myfile.sh > /home/<username>/output_file.txt 

Вы увидите, что вывод был записан в этот файл в домашнем каталоге пользователя.

Если вы хотите написать в другие каталоги, я предлагаю вам использовать общесистемный кронтаб в /etc/crontab

Кстати, вы можете включить ведение журнала для хрон рабочих мест для отслеживания проблем.Вам нужно отредактировать файл /etc/rsyslog.conf or /etc/rsyslog.d/50-default.conf и убедитесь, что у вас есть следующие строки раскомментировать или добавить его, если он отсутствует:

cron.*       /var/log/cron.log 

Затем перезапустите rsyslog и cron:

sudo service rsyslog restart 
sudo service cron restart 

Теперь вы видите, если ваша команда управлялся cron или нет.

+0

Я пробовал ваше решение, но ничего не было написано в моем txt-файле. что я сделал, это создать txt-файл в моем домашнем каталоге, а затем изменить мой crontab на '* * * * * /home/myfile.sh>/home/myText.txt' –

+0

. Думаю, вы не можете писать в файл в каталоге '/ home /', потому что только root-пользователь имеет доступ к записи в директорию '/ home' directcroty. Итак, попробуйте изменить строку задания cron на '* * * * */home/myfile.sh>/home//myText.txt' – midihenry

+0

@Bahman_Aries Я обновил свой ответ. – midihenry

Смежные вопросы