The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Добавление\удаление заданий crontab через shell"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Добавление\удаление заданий crontab через shell"  +/
Сообщение от fire002 email(ok) on 19-Авг-13, 18:15 
Камрады, подскажите как реализовать редактирование юзерского крона(crontab -e) через шелл.
Если добавлять непосредственно в файл, /var/spool/cron/username , то крон отваливается с ошибкой:
/usr/sbin/cron[23287]: (amx) WRONG INODE INFO (crontabs/username)
Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Добавление\удаление заданий crontab через shell"  +/
Сообщение от тень_pavel_simple on 19-Авг-13, 18:28 
> Камрады, подскажите как реализовать редактирование юзерского крона(crontab -e) через
> шелл.
> Если добавлять непосредственно в файл, /var/spool/cron/username , то крон отваливается
> с ошибкой:
> /usr/sbin/cron[23287]: (amx) WRONG INODE INFO (crontabs/username)

man crontab

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Добавление\удаление заданий crontab через shell"  +/
Сообщение от allez (ok) on 19-Авг-13, 18:55 
>> Камрады, подскажите как реализовать редактирование юзерского крона(crontab -e) через
>> шелл.
>> Если добавлять непосредственно в файл, /var/spool/cron/username , то крон отваливается
>> с ошибкой:
>> /usr/sbin/cron[23287]: (amx) WRONG INODE INFO (crontabs/username)
> man crontab

Сдается мне, что автор темы этот ман все же читал, по крайней мере, crontab -e
он упомянул. Возможно он хочет редактировать кронтаб не интерактивно, а из скрипта...

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Добавление\удаление заданий crontab через shell"  +/
Сообщение от fire002 email(ok) on 19-Авг-13, 19:01 
>>> Камрады, подскажите как реализовать редактирование юзерского крона(crontab -e) через
>>> шелл.
>>> Если добавлять непосредственно в файл, /var/spool/cron/username , то крон отваливается
>>> с ошибкой:
>>> /usr/sbin/cron[23287]: (amx) WRONG INODE INFO (crontabs/username)
>> man crontab
> Сдается мне, что автор темы этот ман все же читал, по крайней
> мере, crontab -e
> он упомянул. Возможно он хочет редактировать кронтаб не интерактивно, а из скрипта...

Именно из скрипта.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Добавление\удаление заданий crontab через shell"  +/
Сообщение от михалыч (ok) on 19-Авг-13, 19:07 
>>>> Камрады, подскажите как реализовать редактирование юзерского крона(crontab -e) через
>>>> шелл.
>>>> Если добавлять непосредственно в файл, /var/spool/cron/username , то крон отваливается
>>>> с ошибкой:
>>>> /usr/sbin/cron[23287]: (amx) WRONG INODE INFO (crontabs/username)
>>> man crontab
>> Сдается мне, что автор темы этот ман все же читал, по крайней
>> мере, crontab -e
>> он упомянул. Возможно он хочет редактировать кронтаб не интерактивно, а из скрипта...
> Именно из скрипта.

А в чём трудность?
echo "* * * * * /bin/echo test" >> /var/cron/tabs/user

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Добавление\удаление заданий crontab через shell"  +/
Сообщение от тень_pavel_simple on 19-Авг-13, 19:11 
>>>> Камрады, подскажите как реализовать редактирование юзерского крона(crontab -e) через
>>>> шелл.
>>>> Если добавлять непосредственно в файл, /var/spool/cron/username , то крон отваливается
>>>> с ошибкой:
>>>> /usr/sbin/cron[23287]: (amx) WRONG INODE INFO (crontabs/username)
>>> man crontab
>> Сдается мне, что автор темы этот ман все же читал, по крайней
>> мере, crontab -e
>> он упомянул. Возможно он хочет редактировать кронтаб не интерактивно, а из скрипта...
> Именно из скрипта.

не уверен что читал
       The  first  form  of  this command is used to install a new crontab from some named file or standard input if the pseudo-filename
       ``-'' is given.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "Добавление\удаление заданий crontab через shell"  +/
Сообщение от михалыч (ok) on 19-Авг-13, 19:33 
>[оверквотинг удален]
>>>> man crontab
>>> Сдается мне, что автор темы этот ман все же читал, по крайней
>>> мере, crontab -e
>>> он упомянул. Возможно он хочет редактировать кронтаб не интерактивно, а из скрипта...
>> Именно из скрипта.
> не уверен что читал
>        The  first  form
>  of  this command is used to install a new
> crontab from some named file or standard input if the pseudo-filename
>        ``-'' is given.

Так точно! ))
echo "* * * * * /bin/echo test" | crontab -u username -

Хотя у меня и тупо >> сработало.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Добавление\удаление заданий crontab через shell"  +/
Сообщение от fire002 (ok) on 19-Авг-13, 21:13 
>[оверквотинг удален]
>>> Именно из скрипта.
>> не уверен что читал
>>        The  first  form
>>  of  this command is used to install a new
>> crontab from some named file or standard input if the pseudo-filename
>>        ``-'' is given.
> Так точно! ))
> echo "* * * * * /bin/echo test" | crontab -u username
> -
> Хотя у меня и тупо >> сработало.

Оно то работает, но стоит зачада еще как-то удалять уже не нужные строки из файла, а не тупо -r
Попробую конечно седом, поглядим.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Добавление\удаление заданий crontab через shell"  +/
Сообщение от Аноним (??) on 19-Авг-13, 21:48 
> Оно то работает, но стоит зачада еще как-то удалять уже не нужные строки из файла, а не тупо -r

вначале выгружаешь что есть с -l, правишь как надо и потом заливаешь обратно.
Могу ещё раз повторить но это уже за деньги.

> Попробую конечно седом, поглядим.

Чем сподобишься. Это уже дело 18-ое. Идею тебе _дали_.

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Добавление\удаление заданий crontab через shell"  +/
Сообщение от Andrey Mitrofanov on 19-Авг-13, 22:59 
> Именно из скрипта.

$ crontab -r
$ add(){ ls -l $1; echo "* * * * * echo TEXT" >>$1; touch -d '+5 minutes' $1; }
$ export -f add
$ VISUAL=add crontab -e
no crontab for abm - using an empty one
-rw------- 1 user crontab 888 Авг 19 22:55 /tmp/crontab.NyUpaG/crontab
crontab: installing new crontab
$ crontab -l |grep -v ^#
* * * * * echo TEXT
$ add(){ ls -l $1; echo "* * * * * cat FILE" >>$1; touch -d '+5 minutes' $1; }
$ VISUAL=add crontab -e
-rw------- 1 user crontab 908 Авг 19 22:56 /tmp/crontab.S86Hwg/crontab
crontab: installing new crontab
$ crontab -l |grep -v ^#
* * * * * echo TEXT
* * * * * cat FILE
$ del(){ sed -i "/echo TEXT$/d" $1; touch -d '+5 minutes' $1; }
$ export -f del
$ VISUAL=del crontab -e
crontab: installing new crontab
$ crontab -l |grep -v ^#
* * * * * cat FILE
$ _

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

10. "Добавление\удаление заданий crontab через shell"  +/
Сообщение от fire002 email(ok) on 20-Авг-13, 02:39 
>> Именно из скрипта.

Что-то не работает у меня ваш вариант, хотя может и я туплю.

$ add(){ ls -l $1; echo "* * * * * echo TEXT" >>$1; touch -d '+5 minutes' $1; }
$ export -f add
export: 18: Illegal option -f
$ VISUAL=add crontab -e
no crontab for amx - using an empty one
/bin/sh: add: not found
crontab: "add" exited with status 127

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "Добавление\удаление заданий crontab через shell"  +/
Сообщение от Andrey Mitrofanov on 20-Авг-13, 10:46 
> $ export -f add
> export: 18: Illegal option -f

У меня работает. GNU/Linux, GNU bash, GNU coreutiuls.

> /bin/sh: add: not found

Бывает.

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "Добавление\удаление заданий crontab через shell"  +/
Сообщение от михалыч (ok) on 20-Авг-13, 11:31 
>>> Именно из скрипта.
> Что-то не работает у меня ваш вариант, хотя может и я туплю.

Нет. Ты не тупишь. У меня также как у тебя работает.))
BSD ? Мужайся!
Братья масоны не оставят в беде!
То, что доктор прописал.

cat create_crontab.sh


#!/bin/sh


create_crontab() {
    local b e
    b=$1
    e=$2


    if crontab -u username -l > /dev/null 2>&1; then
        TMPFILE=`mktemp -t username` || exit 1
        cat > $TMPFILE
        crontab -u username -l | sed -e "/^$b\$/,/^$e\$/d" | \
        cat - $TMPFILE | crontab -u username -
        rm $TMPFILE
    else
        crontab -u username -
    fi
}


create_crontab '#BEGIN_JOB_1' '#END_JOB_1' <<EOT
#BEGIN_JOB_1
MAILTO=root

*/5 * * * * echo TEXT
#END_JOB_1
EOT


cat delete_crontab.sh

#!/bin/sh


delete_crontab() {
    local b e
    b=$1
    e=$2


    TMPFILE=`mktemp -t username` || exit 1
    crontab -u username -l | sed -e "/^$b\$/,/^$e\$/d" > $TMPFILE
    if [ -s $TMPFILE ]; then
        crontab -u username -l | sed -e "/^$b\$/,/^$e\$/d" | crontab -u username -
        echo "These are the remaining lines:"
        crontab -u username -l
    else
        echo y | crontab -u username -r
        echo "crontab for user username removed"
    fi
    rm $TMPFILE
}


delete_crontab '#BEGIN_JOB_1' '#END_JOB_1'

Идея с поста 8

Принцип с #BEGIN_JOB_* и #END_JOB_* думаю понятен,
то есть удаляем только то что между конкретными строками, а остальное переписываем.

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

13. "Добавление\удаление заданий crontab через shell"  +/
Сообщение от Andrey Mitrofanov on 21-Авг-13, 11:21 
>>>> Именно из скрипта.
>> Что-то не работает у меня ваш вариант, хотя может и я туплю.
> Нет. Ты не тупишь. У меня также как у тебя работает.))
> BSD ? Мужайся!
> Братья масоны не оставят в беде!

И построят братский race condition.

> То, что доктор прописал.

crontab -u username -l | ... | crontab -u username -

Оно совсем не страшно. Если _не сработает_ одно удаление или добавление из... тысячи или миллиона. Тем более у какого-то там плотника-каменщика-подметальщика и где-то там очень далеко.

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

14. "Добавление\удаление заданий crontab через shell"  +/
Сообщение от pavlinux (ok) on 22-Авг-13, 05:22 
Чёй-то вы намутили

#!/bin/sh

CRONFILE=/somewhere/somefile

EVENT="5 06 * 2 * echo TEXT"

#  Добавить
echo $EVENT >> $CRONFILE

# Удалить  
diff -u <(grep -v $EVENT $CRONFILE) <(cat $CRONFILE) | patch -R $CRONFILE;

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

16. "Добавление\удаление заданий crontab через shell"  +/
Сообщение от Andrey Mitrofanov on 22-Авг-13, 07:31 
> #!/bin/sh

Удостаиваешься звания младшего встраивальщика-каменщика.

> EVENT="5 06 * 2 * echo TEXT"

--------------------^^--^^  "*"

> diff -u <(grep -v $EVENT $CRONFILE) <(cat $CRONFILE) | patch -R $CRONFILE;

---------------^^^^^  "-f" ?

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

17. "Добавление\удаление заданий crontab через shell"  +/
Сообщение от михалыч (ok) on 22-Авг-13, 16:11 
> Чёй-то вы намутили
>
 
> #!/bin/sh
> CRONFILE=/somewhere/somefile
> EVENT="5 06 * 2 * echo TEXT"
> #  Добавить
> echo $EVENT >> $CRONFILE
> # Удалить
> diff -u <(grep -v $EVENT $CRONFILE) <(cat $CRONFILE) | patch -R $CRONFILE;
>

Так не честно! Это читерство!
Если по чесноку, надо использовать сам crontab

А мухлевать я и сам умею!))

crontab -u username -l
* * * * * echo TEST
* * * * * echo TEXT

#!/bin/sh


CRONFILE="/var/cron/tabs/username"
EVENT="* * * * * echo TORT"


# Добавить
echo "${EVENT}" >> ${CRONFILE}


crontab -u username -l
* * * * * echo TEST
* * * * * echo TEXT
* * * * * echo TORT
#!/bin/sh


CRONFILE="/var/cron/tabs/username"
EVENT="* * * * * echo TEXT"


# Удалить
sed -i "" "/${EVENT}/d" ${CRONFILE}


crontab -u username -l
* * * * * echo TEST
* * * * * echo TORT
Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

18. "Добавление\удаление заданий crontab через shell"  +/
Сообщение от pavlinux (ok) on 25-Авг-13, 01:43 
>> diff -u <(grep -v $EVENT $CRONFILE) <(cat $CRONFILE) | patch -R $CRONFILE;
> Так не честно! Это читерство!
> sed -i "" "/${EVENT}/d" ${CRONFILE}

А сам-то!

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

15. "Добавление\удаление заданий crontab через shell"  –1 +/
Сообщение от pavlinux (ok) on 22-Авг-13, 05:25 
> Камрады, подскажите как реализовать редактирование юзерского крона(crontab -e) через шелл.

А ваще у вас питатые операционки

$~> crontab -u $USER -l
bash: /usr/bin/crontab: Отказано в доступе

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2020 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру