LINUX.ORG.RU

запуск скрипта на определенное время и снова

 


0

1

Есть скрипт на C, его требуется запускать на определенное время с агрументами (которые постоянно разные), к примеру запустили на 5 минут, вырубили его, через пол минуты снова запустили с другим значением аргумента
как правильнее и чем это можно реализовать ?

А что за аргументы?

Для периодического запуска обычно используют crontab, но в твоем случае не очень понятно, можно ли это вообще автоматизировать.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

Запускай скрипт, который будет запускать скрипт, который будет запускать скрипт. Почему бы вместо этого не сделать нормальный контроль над скриптом? Например, чтобы он мог останавливаться, получать новые параметры и остальное.

anonymous
()
Ответ на: комментарий от anonymous

я не понял о чем ты написал и причем тут «Запускай скрипт, который будет запускать скрипт, который будет запускать скрипт.», если мне нужно 1 скрипт запускать

noname_user ★★★
() автор топика
Ответ на: комментарий от Deleted

там аргумент как название файла, к примеру out-1, out-2 и так далее

noname_user ★★★
() автор топика

./script & sleep $((60 * 5)) && kill $!

anonymous
()
Ответ на: комментарий от noname_user

Вообще то тебя правильно все сказали, повесь в кнотаб скрипт которые умеет запускать твой скрипт с нужными параметрами.

Noob_Linux ★★★★
()

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

К примеру если эти параметры генерятся где-то или отдельно автоматизированно можно их получить - тогда пожно твой скрипт превратить в сервис, который считывает эти три паркметра(имя файла, ркннинг тайм, время ожидкния между запусками) и передает это в коде функции которая знает что а этим делать, потом ждет сколько задано и повторяет цикл.

Kronick
()

Доп. Скрипт, в скрипте прибываем твой скрипт по пидфайлу, считываем из списка новый набор параметров, запускаем скрипт заново, пид сохраняем в файл. И вот этот скрипт уже в крон.

DELIRIUM ☆☆☆☆☆
()

Сформируй еще раз задачу. И так, чтобы даже я понял.

crutch_master ★★★★★
()

Скрипт на С? Ну же хорошо... =)))

Ладно. Давайте попробуем совладать с этим Вашим «скриптом на С». =)))

его требуется запускать на определенное время с агрументами (которые постоянно разные), к примеру запустили на 5 минут, вырубили его, через пол минуты снова запустили с другим значением аргумента

Так-то у Вас в coreutils входит такая прекрасная команда как timeout. Т.е., если этот Ваш «скрипт на С» называется script_in_c, то запуск на 5 минут будет

timeout 5m script_in_c args

man timeout в общем и целом. Если вдруг timeout не обнаружится, мало ли... то вон, уже сказали запуск скрипта на определенное время и снова (комментарий)

Однако, учитывая то, что от Вас получено в ходе допроса (под пытками?):

там аргумент как название файла, к примеру out-1, out-2 и так далее

Получается что Вам хочется чтобы вручную не генерировать аргументы запуска Вашего скрипта на С, наверное? Т.е., чтобы не запускать вот так как-то постоянно:

timeout 5m sctipt_in_c out-{1..100}

Если да, то тогда либо надо переписать этот Ваш скрипт на С с использованием механизма inotify (а это, как я понимаю, сложно в данном случае), ну либо средствами bash + сторонний утиль как-то. Т.е., в обоих случаях мы делаем каталог (пусть будет /tmp/testdir), а дальше либо своим кодом на С надзираем над его содержимым, либо утилитами из набора inotify-tools (поставьте их, если нет в системе).

Предположим, сделаем такой testdir.sh в своём хомяке, где его и запускать будем как ./testdir.sh.

Итак, делаем что-то типа:

#!/bin/bash

DIR_WATCH="/tmp/testdir"

do_something() {
	# Запускаем этот Ваш 'скрипт на с' на 5 минут.
	# В качестве аргумента используем имя файла, который
	# был записан в каталог, за которым наблюдаем.
	timeout 5m script_in_c $1
}

inotifywait -e close_write --format '%w %f' -m -r $DIR_WATCH |\
(
while read
	do
		# Получаем имя файла для обработки.
		FILE=$(echo $REPLY | cut -f 2 -d' ')
		do_something $FILE
	done
)

Запускаем этот файл. Теперь открываем второй терминал и делаем тупо touch /tmp/testdir/out-{0001..1000}. В первом терминале увидим результат. Тут бы с запуском в параллель ещё определиться, но это уже мелочи. По завершении теста делаем rm /tmp/testdir/* чтобы почистить там всё ненужное говно.

Самое приятное в том, что inotifywait тоже может запускаться на время, либо до нажатия Ctrl+C, но это уже в качестве самостоятельного задания. =)

Таким образом, Вы запускаете свой «скрипт на с» на определённое время, как и просили, и по мере поступления файлов в каталог, чтоб не сидеть не тупить за их появлением. Правда, я бы на свой вкус и цвет переписал бы этот Ваш «скрипт на с» в виде демона с inotify, сидел бы он в системе, да спокойно работал, но так задачи не ставилось.

Осталось только заметить что нам в принципе похрен откуда в каталоге и в каком количестве появляются в таком случае файлы для обработки. Хоть rsync откуда-то стянуты, хоть по ftp залиты, хоть из другого утиля получились локально. Это похрен.

Moisha_Liberman ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.