Камрады, подскажите как реализовать редактирование юзерского крона(crontab -e) через шелл.
Если добавлять непосредственно в файл, /var/spool/cron/username , то крон отваливается с ошибкой:
/usr/sbin/cron[23287]: (amx) WRONG INODE INFO (crontabs/username)
> Камрады, подскажите как реализовать редактирование юзерского крона(crontab -e) через
> шелл.
> Если добавлять непосредственно в файл, /var/spool/cron/username , то крон отваливается
> с ошибкой:
> /usr/sbin/cron[23287]: (amx) WRONG INODE INFO (crontabs/username)man crontab
>> Камрады, подскажите как реализовать редактирование юзерского крона(crontab -e) через
>> шелл.
>> Если добавлять непосредственно в файл, /var/spool/cron/username , то крон отваливается
>> с ошибкой:
>> /usr/sbin/cron[23287]: (amx) WRONG INODE INFO (crontabs/username)
> man crontabСдается мне, что автор темы этот ман все же читал, по крайней мере, crontab -e
он упомянул. Возможно он хочет редактировать кронтаб не интерактивно, а из скрипта...
>>> Камрады, подскажите как реализовать редактирование юзерского крона(crontab -e) через
>>> шелл.
>>> Если добавлять непосредственно в файл, /var/spool/cron/username , то крон отваливается
>>> с ошибкой:
>>> /usr/sbin/cron[23287]: (amx) WRONG INODE INFO (crontabs/username)
>> man crontab
> Сдается мне, что автор темы этот ман все же читал, по крайней
> мере, crontab -e
> он упомянул. Возможно он хочет редактировать кронтаб не интерактивно, а из скрипта...Именно из скрипта.
>>>> Камрады, подскажите как реализовать редактирование юзерского крона(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 -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.
>[оверквотинг удален]
>>>> 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 -Хотя у меня и тупо >> сработало.
>[оверквотинг удален]
>>> Именно из скрипта.
>> не уверен что читал
>> 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
Попробую конечно седом, поглядим.
> Оно то работает, но стоит зачада еще как-то удалять уже не нужные строки из файла, а не тупо -rвначале выгружаешь что есть с -l, правишь как надо и потом заливаешь обратно.
Могу ещё раз повторить но это уже за деньги.> Попробую конечно седом, поглядим.
Чем сподобишься. Это уже дело 18-ое. Идею тебе _дали_.
> Именно из скрипта.
$ 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
$ _
>> Именно из скрипта.Что-то не работает у меня ваш вариант, хотя может и я туплю.
$ 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
> $ export -f add
> export: 18: Illegal option -fУ меня работает. GNU/Linux, GNU bash, GNU coreutiuls.
> /bin/sh: add: not found
Бывает.
>>> Именно из скрипта.
> Что-то не работает у меня ваш вариант, хотя может и я туплю.Нет. Ты не тупишь. У меня также как у тебя работает.))
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_* думаю понятен,
то есть удаляем только то что между конкретными строками, а остальное переписываем.
>>>> Именно из скрипта.
>> Что-то не работает у меня ваш вариант, хотя может и я туплю.
> Нет. Ты не тупишь. У меня также как у тебя работает.))
> BSD ? Мужайся!
> Братья масоны не оставят в беде!И построят братский race condition.
> То, что доктор прописал.
crontab -u username -l | ... | crontab -u username -
Оно совсем не страшно. Если _не сработает_ одно удаление или добавление из... тысячи или миллиона. Тем более у какого-то там плотника-каменщика-подметальщика и где-то там очень далеко.
Чёй-то вы намутили
#!/bin/shCRONFILE=/somewhere/somefile
EVENT="5 06 * 2 * echo TEXT"
# Добавить
echo $EVENT >> $CRONFILE# Удалить
diff -u <(grep -v $EVENT $CRONFILE) <(cat $CRONFILE) | patch -R $CRONFILE;
> #!/bin/shУдостаиваешься звания младшего встраивальщика-каменщика.
> EVENT="5 06 * 2 * echo TEXT"
--------------------^^--^^ "*"
> diff -u <(grep -v $EVENT $CRONFILE) <(cat $CRONFILE) | patch -R $CRONFILE;
---------------^^^^^ "-f" ?
> Чёй-то вы намутили
>
> #!/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
>> diff -u <(grep -v $EVENT $CRONFILE) <(cat $CRONFILE) | patch -R $CRONFILE;
> Так не честно! Это читерство!
> sed -i "" "/${EVENT}/d" ${CRONFILE}
А сам-то!
> Камрады, подскажите как реализовать редактирование юзерского крона(crontab -e) через шелл.А ваще у вас питатые операционки
$~> crontab -u $USER -l
bash: /usr/bin/crontab: Отказано в доступе