LinuxForum.Fans
Тема

Циклическое выполнение скрипта на сервере

Автор: kennedy 25 сообщений 4520 просмотров
#80754

Припустим есть файл (777) /var/scr/scr.txt (wget _ttp://site.ru/file.txt; mv /var/scr/file.txt; /var/scr/scr.txt;)
если его запустить он будет работать в цикле? и как его потом можно остановить?

#80766

если засунуть в цикл ожидание некой переменной определяемой в файле?

#80775

это и есть содержимое файла
wget _ttp://site.ru/file.txt; mv /var/scr/file.txt; /var/scr/scr.txt

после того как файл скачался и удалился скрипт сам себя вызывает. Гуманно.
Или как правильно его написать? нужно что бы сервер 24 часа в сутки скачивал и удалял файл.

#80776
kennedy написал:
это и есть содержимое файла
wget _ttp://site.ru/file.txt; mv /var/scr/file.txt; /var/scr/scr.txt

после того как файл скачался и удалился скрипт сам себя вызывает. Гуманно.
Или как правильно его написать? нужно что бы сервер 24 часа в сутки скачивал и удалял файл.

В самом примитивном варианте:

text

while:;
do
wget _ttp://site.ru/file.txt; mv /var/scr/file.txt; /var/scr/scr.txt
done
#80777

вернее так
cd /var/scr/; wget _ttp://site.ru/file.txt; mv /var/scr/file.txt; /var/scr/scr.txt
просто на рабочем сервере экспериментировать не хочется а виртуалку поднимать лень oO

#80778

Lupo Alberto, а как его потом остановить если возникнет необходимость? убить процесс через top не получиться, ctrl+c тоже не сработает :(

#80779

Lupo Alberto, /var/scr/scr.txt это исполняемый файл, который запускается в самом начале. Если делать цикл его наверное повторять не нужно? цикл точно сработает? wink а то я как бы и не разбегаюсь совсем в программировании на линуксе.

#80784
kennedy написал:
Lupo Alberto, /var/scr/scr.txt это исполняемый файл, который запускается в самом начале. Если делать цикл его наверное повторять не нужно? цикл точно сработает? wink а то я как бы и не разбегаюсь совсем в программировании на линуксе.

Вы определитесь нужно вам его повторять или нет? Как часто нужно?
В общем случае:

text

#!/bin/bash
while :;
do
ВАШ_СКРИПТ
echo $$ > /tmp/test.pid
done

Остановить скрипт:

text

kill -9 $(cat /tmp/test.pid)

Но всё это достаточно «сырое» решение.

#80785

Откуда мне знать повторять его в скрипте или нет? Все что мне нужно так это скачать файл потом его удалить потом снова скачать и снова удалить и так далее. просто в моем варианте /var/scr/scr.txt это исполняемый файл который сам себя вызывает что бы снова начать скачивать и удалять. Но в вашем варианте цикл, наверное вызывать не нужно? Может еще подскажете как остановить цикл в случаи ошибки? :rolleyes:

А еще лучше установить задержку в случаи возникновения ошибки.

#80786

kennedy, извините, но я не буду писать скрипт вместо вас.

#80787

Все таки как мало в нашем мире значит просто человеческое СПАСИБО даже скрипт взамен получить не удается smile . Ладно. и на том спасибо.

#80791

kennedy, вы системный администратор?

#80792

А что похож? oO

#80796

если вы не системный администратор (?) тогда кто будет поддерживать этот скрипт?

#80798

планируется что его не нужно будет поддерживать. сервер в аренде, его не жалко. запустил и пусть шуршит. главное что б не выделывался и не останавливался :cool: Просто хочется как то правильно его написать что б потом меньше проблем было.

#80802
kennedy написал:
что б потом меньше проблем было.

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

#80806

Зачем в примитивный скрипт вносить изменения. Я думаю со временем ДЦ одумается и не будет создавать таких ситуаций. Но, даже мой первый вариант должен работать, по логике, так что моих примитивных знаний мне пока что достаточно. Ну а особенности программирования в линукс я никогда не учил. Сталкиваюсь очень редко. Хотя... может и стоит как то уделить время... oO

#81365
kennedy написал:
Припустим есть файл (777) /var/scr/scr.txt (wget _ttp://site.ru/file.txt; mv /var/scr/file.txt; /var/scr/scr.txt;)
если его запустить он будет работать в цикле? и как его потом можно остановить?

Так делать не стоит. А именно - ты нафоркаешь мульен процессов scr.txt. Так как первый твой процесс запустит еще один src.txt и будет ждать его окончания. А тот поступит точно также. Если очень важна именно такая запись, то форкать следующий scr.txt надо с символом &. Тогда вызвавающий процесс не будет ждать окончания процеса вызванного и спокойно завершиться. Это первое.
Первое с важной половиной: 777 - это как я понимаю есть атрибуты файла? Подумай над ними - ведь сейчас (с такими атрибутами) любой пользователь сможет внести в твой исполняемый скрипт любые изменения и они оработают от твоего имени. Оно тебе надо? Я думаю, что здесь наилучшем образом подойдет маска прав 700 и не более.

А теперь - как делать стоит...

Второе. Почему бы не упростить жизнь и не оформить циклом вида (как было показано ниже)

text
#!/bin/bash
while :;
do
ВАШ_СКРИПТ
echo $$ > /tmp/test.pid
done

Третье - а зачем вообще нужна такая нерерывность? Может проще записать скрипт

text
wget _ttp://site.ru/file.txt;mv /var/scr/file.txt;

и запускать его по крону с заанной периодичность?

Четвертое - очень похоже, что здесь решается задача оперативной синхронизации. Так может посмотреть в сторону rsync'а, который именно для этого и предназначен? Он не будет качать тупо всё файло, а займется делом только когда файл-первоисточник изменится. Что очень экономит трафик.

#81639

Cruiser78, Вы не внимательно читали. Весь смысл в непрерывном повторении. Новый не начнется пока не закончится предыдущий. "мульен процессов" возникнуть не должно. Сервер в ДЦ, доступ только у меня, 777 что бы не заморачиваться smile

#81661

подскажите как записать...

for ($i;$i<100;$i++) {

команда;

}

Войдите или зарегистрируйтесь, чтобы ответить.