LINUX.ORG.RU

Скрипт bash с таймером

 , ,


0

2

Доброго времени суток. Появилась задача сделать следующий скрипт: пользователь должен передать два параметра скрипту - pid процесса и время (в секундах). Скрипт должен получить эти параметры и отслеживать загрузку процессора и используемую процессом память и дописывать файл с содержанием этой информации. Время указывается для опроса обновления информации, т.е. в течение указанного времени каждую секунду в файл дописывается информация по загрузке процессора и используемая память. Буду признателен за подробный ответ а лучше пример скрипта. Спасибо.

Схематично, так

#!/bin/sh
while (true) 
do
 здесь получаете нужные данные
 из /proc/$1/status — ps aux — whater
 и пененаправляете вывод в нужный файл
 ну и всякие проверки на параметры напишите сами
 гугл открыт — вперед
 sleep $2;
done;
Только ответьте на простой вопрос. Зачем? Вы же только что изобрели мониторинг, а для него написано биллионы скриптов/ПО/etc.

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

Перечитай задание внимательно - $2 не интервал, а время в течении которого ежесекундно будет записываться информация.

По сабжу:

#! /bin/bash
T=0
while [[ "$T" -lt $2 ]]; do
	echo "Инфа о процессе" >> file.txt
	T=$(($T+1))
	sleep 1
done

exit 0

najlus ★★★★★
()
Ответ на: комментарий от najlus
#!/bin/bash
test $# -eq 2 || exit 1
(sleep $2 && kill $$)&
while true; do cat /proc/$1/stat; sleep 1; done

Запись в файл лучше imho отдельно от скрипта.

./stat.sh `pidof firefox` 10 | tee -a firefox.log

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от najlus

Большое спасибо за ответ. Но баш выдает ошибку

+ T=0
+ '[0' -lt '10]'
watch.sh: line 7: [0: command not found


Мой скрипт

#!/bin/bash
echo "enter pid"
read pid
echo "enter time in seconds"
read time
T=0
while ["$T" -lt $time];
	do
	echo "ps -eo pid,pcpu,vsz | grep $pid">>excel.csv	
	T=$(($T+1))
	sleep 1
done
unitready
() автор топика
Ответ на: комментарий от unitready

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

najlus ★★★★★
()
Ответ на: комментарий от beastie

А еще в файл пишется

ps -ho pcpu,vsz -p 414
ps -ho pcpu,vsz -p 414
ps -ho pcpu,vsz -p 414
ps -ho pcpu,vsz -p 414
ps -ho pcpu,vsz -p 414
ps -ho pcpu,vsz -p 414
ps -ho pcpu,vsz -p 414
ps -ho pcpu,vsz -p 414



Что то напутал в echo, подскажите пожалуйста
unitready
() автор топика
Ответ на: комментарий от beastie

Посмотрите удаленные сообщение :) Сори, надо поменьше на ЛОР бухим заходить :D

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

Все, разобрался. Спасибо большое за помощь нубу )

unitready
() автор топика
Ответ на: комментарий от sudopacman
test "$pid" || { test "$1" && pid=$1 || read -p "Enter PID: " pid ; }
test "$time" || { test "$1" && time=$1 || read -p "Enter time in seconds: " time ; }

# ...
echo PID: $pid
echo Time: $time
# ...
[user@host tmp]$ sh ./script.sh 
Enter PID: 1
Enter time in seconds: 2
pid 1
time 2
[user@host tmp]$ sh ./script.sh 3
Enter time in seconds: 4
pid 3
time 4
[user@host tmp]$ pid=3 sh ./script.sh
Enter time in seconds: 6
pid 3
time 6
[user@host tmp]$ pid=4 sh ./script.sh - 8
pid 4
time 8
[user@host tmp]$ time=22 sh ./script.sh
Enter PID: 87
pid 87
time 22
[user@host tmp]$ pid=11 time=22 sh ./script.sh
pid 11
time 22
[user@host tmp]$
berrywizard ★★★★★
()
Ответ на: комментарий от sudopacman

Передача параметров или в командной строке, или через переменные среды, если же из этого ничего не передано, то интерактивный ввод.

berrywizard ★★★★★
()
Ответ на: комментарий от sudopacman

Записывать ввод до нажатия enter сразу в переменную.

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

?!?

Ещё раз: это я накатал пример, что если скрипту не переданы параметры (через среду или КС), то он запрашивает их у пользователя. Не более.

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