URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9723
[ Назад ]

Исходное сообщение
"Добавление\удаление заданий crontab через shell"

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

Содержание

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

man crontab


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

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


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

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


"Добавление\удаление заданий crontab через shell"
Отправлено михалыч , 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


"Добавление\удаление заданий crontab через shell"
Отправлено тень_pavel_simple , 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.


"Добавление\удаление заданий crontab через shell"
Отправлено михалыч , 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 -

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


"Добавление\удаление заданий crontab через shell"
Отправлено fire002 , 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
Попробую конечно седом, поглядим.


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

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

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

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


"Добавление\удаление заданий crontab через shell"
Отправлено Andrey Mitrofanov , 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
$ _


"Добавление\удаление заданий crontab через shell"
Отправлено fire002 , 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


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

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

> /bin/sh: add: not found

Бывает.


"Добавление\удаление заданий crontab через shell"
Отправлено михалыч , 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_* думаю понятен,
то есть удаляем только то что между конкретными строками, а остальное переписываем.


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

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

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

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

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


"Добавление\удаление заданий crontab через shell"
Отправлено pavlinux , 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;


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

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

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

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

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

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


"Добавление\удаление заданий crontab через shell"
Отправлено михалыч , 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

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

А сам-то!


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

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

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