Припустим есть файл (777) /var/scr/scr.txt (wget _ttp://site.ru/file.txt; mv /var/scr/file.txt; /var/scr/scr.txt;)
если его запустить он будет работать в цикле? и как его потом можно остановить?
Циклическое выполнение скрипта на сервере
если засунуть в цикл ожидание некой переменной определяемой в файле?
это и есть содержимое файла
wget _ttp://site.ru/file.txt; mv /var/scr/file.txt; /var/scr/scr.txt
после того как файл скачался и удалился скрипт сам себя вызывает. Гуманно.
Или как правильно его написать? нужно что бы сервер 24 часа в сутки скачивал и удалял файл.
это и есть содержимое файла
wget _ttp://site.ru/file.txt; mv /var/scr/file.txt; /var/scr/scr.txt
после того как файл скачался и удалился скрипт сам себя вызывает. Гуманно.
Или как правильно его написать? нужно что бы сервер 24 часа в сутки скачивал и удалял файл.
В самом примитивном варианте:
while:;
do
wget _ttp://site.ru/file.txt; mv /var/scr/file.txt; /var/scr/scr.txt
done
вернее так
cd /var/scr/; wget _ttp://site.ru/file.txt; mv /var/scr/file.txt; /var/scr/scr.txt
просто на рабочем сервере экспериментировать не хочется а виртуалку поднимать лень oO
Lupo Alberto, а как его потом остановить если возникнет необходимость? убить процесс через top не получиться, ctrl+c тоже не сработает :(
Lupo Alberto, /var/scr/scr.txt это исполняемый файл, который запускается в самом начале. Если делать цикл его наверное повторять не нужно? цикл точно сработает? wink а то я как бы и не разбегаюсь совсем в программировании на линуксе.
Lupo Alberto, /var/scr/scr.txt это исполняемый файл, который запускается в самом начале. Если делать цикл его наверное повторять не нужно? цикл точно сработает? wink а то я как бы и не разбегаюсь совсем в программировании на линуксе.
Вы определитесь нужно вам его повторять или нет? Как часто нужно?
В общем случае:
#!/bin/bash
while :;
do
ВАШ_СКРИПТ
echo $$ > /tmp/test.pid
done
Остановить скрипт:
kill -9 $(cat /tmp/test.pid)
Но всё это достаточно «сырое» решение.
Откуда мне знать повторять его в скрипте или нет? Все что мне нужно так это скачать файл потом его удалить потом снова скачать и снова удалить и так далее. просто в моем варианте /var/scr/scr.txt это исполняемый файл который сам себя вызывает что бы снова начать скачивать и удалять. Но в вашем варианте цикл, наверное вызывать не нужно? Может еще подскажете как остановить цикл в случаи ошибки? :rolleyes:
А еще лучше установить задержку в случаи возникновения ошибки.
kennedy, извините, но я не буду писать скрипт вместо вас.
Все таки как мало в нашем мире значит просто человеческое СПАСИБО даже скрипт взамен получить не удается smile . Ладно. и на том спасибо.
kennedy, вы системный администратор?
А что похож? oO
если вы не системный администратор (?) тогда кто будет поддерживать этот скрипт?
планируется что его не нужно будет поддерживать. сервер в аренде, его не жалко. запустил и пусть шуршит. главное что б не выделывался и не останавливался :cool: Просто хочется как то правильно его написать что б потом меньше проблем было.
что б потом меньше проблем было.
как же это возможно, если его напишет за вас другой? как вы планируете контролировать и поддерживать работу скрипта, в котором не разбираетесь? а поддерживать его нужно в любом случае, не сегодня, так через год нужно будет внести какие-то изменения.
Зачем в примитивный скрипт вносить изменения. Я думаю со временем ДЦ одумается и не будет создавать таких ситуаций. Но, даже мой первый вариант должен работать, по логике, так что моих примитивных знаний мне пока что достаточно. Ну а особенности программирования в линукс я никогда не учил. Сталкиваюсь очень редко. Хотя... может и стоит как то уделить время... oO
Припустим есть файл (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 и не более.
А теперь - как делать стоит...
Второе. Почему бы не упростить жизнь и не оформить циклом вида (как было показано ниже)
#!/bin/bash
while :;
do
ВАШ_СКРИПТ
echo $$ > /tmp/test.pid
done
Третье - а зачем вообще нужна такая нерерывность? Может проще записать скрипт
wget _ttp://site.ru/file.txt;mv /var/scr/file.txt;и запускать его по крону с заанной периодичность?
Четвертое - очень похоже, что здесь решается задача оперативной синхронизации. Так может посмотреть в сторону rsync'а, который именно для этого и предназначен? Он не будет качать тупо всё файло, а займется делом только когда файл-первоисточник изменится. Что очень экономит трафик.
Cruiser78, Вы не внимательно читали. Весь смысл в непрерывном повторении. Новый не начнется пока не закончится предыдущий. "мульен процессов" возникнуть не должно. Сервер в ДЦ, доступ только у меня, 777 что бы не заморачиваться smile
подскажите как записать...
for ($i;$i<100;$i++) {
команда;
}