LINUX.ORG.RU
Ответ на: комментарий от pawnhearts

Попробовал. Немного не то... Не сказал сразу, пользователь должен иметь возможность редактирования crontab

Deleted
()
Ответ на: комментарий от pawnhearts

Вот функция добавления задания в крон:

add_user_cron() {
	if [ $# -ne 6 ]; then
	    echo "Usage: $(basename $0) minut hours day month user \"command\""
	    return 1
	else
            cron_user="/var/spool/cron/crontabs/${5}"
	    time="$1 $2 $3 $4 *"
	    cat $cron_user > cron.temp              #сохраняем ранее добавленные задания		   
	    echo "${time} ${command}" >> cron.temp  #дописываем новые во врем. файл   
	    cat cron.temp > $cron_user	  	    #кидаем в crontab юзера   
	    return 0
	fi
}


Так как скрипт работает под root, то после добавление задания оказывается в рутовском crontab. Причём сразу три одинаковые строки) Скипт запускается через браузер (cgi). Попробовал функцию в консоли, всё работает как надо. Как быть?

Deleted
()
Ответ на: комментарий от Deleted

Вот функция добавления задания в крон:

Вы откуда такое откопали?

Так как скрипт работает под root
Скипт запускается через браузер (cgi)

Тушите свет

anc ★★★★★
()
Ответ на: комментарий от Deleted

то после добавление задания оказывается в рутовском crontab. Причём сразу три одинаковые строки)

cron_user=«/var/spool/cron/crontabs/${5}»

Что-то тут не так...

Смотрите в ваш cgi. Можно логировать параметры, которые приходят в функцию: в начало функции добавить

echo $@ >> /tmp/add_user_cron.log

Tanger ★★★★★
()
Ответ на: комментарий от Tanger

Что-то тут не так...


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

Deleted
()
Ответ на: комментарий от anc

cron.temp

это вообще все нормально.

Ну там же есть cat cron.temp > $cron_user. ;)

Вас только это смутило?

Конечно нет!

P.S. Отсутствие command="$6" не заметил.

Tanger ★★★★★
()
Ответ на: комментарий от Tanger

cat cron.temp > $cron_user


А чем плохо-то??? Можно кончено, просто дописывать в конец файла. Но тут еще одна опция будет. UPD. я понимаю, что связка bash/cgi вызывает рвотный рефлекс у тру кодеров) Но мне нравится. Изучаю потихоньку все его возможности.

Deleted
()
Последнее исправление: medossa (всего исправлений: 2)
Ответ на: комментарий от Deleted

А чем плохо-то???

1. ты засираешь рабочую директорию бесполезным cron.temp файлом.

2. какой смысл использовать temp-файл, если ты его содержимое сразу же кидаешь в crontab?

Tanger ★★★★★
()
Ответ на: комментарий от Tanger

У заданий будет так называемые флаги, по которым планирую делать определенные манипуляции. Пока мне удобней работать с файлом, нежели на лету.

Deleted
()
Ответ на: комментарий от Tanger

3. И пинком в догонку, один фиг работать не будет, без рестарта крона.

ТС Вам выше уже намекнули на существование команды crontab. Все решается с ее помощью. Там всего «полтора» ключика и надо.

anc ★★★★★
()
Ответ на: комментарий от Tanger

ЗЫ

1. ты засираешь рабочую директорию бесполезным cron.temp файлом.

Я бы сказал директории (во множественном числе), их может быть много в зависимости от запуска.

anc ★★★★★
()
Ответ на: комментарий от Tanger

Что за вещества?


видосик такой был)
В пользовательский потому, что требуется сделать некую систему уведомлений с возможностью редактирования пользователем. Образовательные цели, ничего личного)

Deleted
()
Ответ на: комментарий от Deleted

я понимаю, что связка bash/cgi вызывает рвотный рефлекс у тру кодеров

А сами подумайте что будет, если вместо параметра прописать патч бармина ?

anc ★★★★★
()

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

Тебе же стоит использовать файлы в /etc/cron.d/.

Примерно так:

echo "45 21 18 02 * legolegs echo TEST >> /tmp/crontest" > legolegs_tasks

Дополнительное преимущество в том, что можно держать каждое задание в своём файле и пр надобности менять/удалять. Из каши в кронтабе можно нечаянно удалить то, что ты туда не клал.

legolegs ★★★★★
()
Ответ на: комментарий от anc

А сами подумайте что будет, если вместо параметра прописать патч бармина

не подумал ещё) всевозможные проверки это на десерт)

Deleted
()
Ответ на: комментарий от legolegs

Дополнительное преимущество в том, что можно держать каждое задание в своём файле


Во, дельный совет! Спасибо.

Deleted
()
Ответ на: комментарий от Deleted

В качестве десерта проверки обычно плохо усваиваются.

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

которая делает всякие дополнительные штуки типа проверки правильности ввода

Ничего, никто не проверяет. Хоть «юх» там напиши. Вопрос только в перечитывании конфигов.

anc ★★★★★
()
Ответ на: комментарий от anc

Через crontab -e открывается vi/nano, проверок никаких. Если crontab file, то проверяет корректность времени.

Deleted
()
Ответ на: комментарий от Deleted

Не во всех дистрах. Так что ориентироваться на проверки crontab не стоит.

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.