PDA

Просмотр полной версии : SysExecute и приоритеты процессов, СПК207



Makarovas
16.06.2015, 14:24
Есть SD карта куда валятся архивы в csv-шном формате, файл за сутки жиреет до 32 Мб, а так как в СПК линуск и есть средства сжатия bzip2, то почему бы не воспользоваться!
Составил значит я команду которая все мои csv-ншники найдет (кроме того который сейчас заполняется) и каждый сожмет в отдельный файл а исходный удалит.


nice -n 19 find /mnt/ufs/media/mmcblk0p1/*.csv -mmin +1 -exec nice -n 19 bzip2 {} \; &

Понизив приоритет этой задаче до минимального и запустив фоном через терминал putty, я с триумфом наблюдал что файлы сжимались (где-то 20-30 минут на каждый). Я был в восторге так как визуализация не сильно просела, а архивы стали весить 90кБ вместо 32Mb!

Но.

После того как я вшил эту команду в проект и стал вызывать её через SysExecute я что-то сразу же и приуныл. SysExecute ровно как и SysExecute2 запускают команду с таким ацким неизменяемым приоритетом что СПК практически перестает реагировать на что либо. И мои nice, renice никак не влияют на ситуацию.

Начал я думать как же быть... Вот коротко что я еще попробовал:

- запуск команды по расписанию средствами cron. Неудача - cron'а нету в линуксе СПК
- создание bash-скрипта и запуск его в фоне при старте ОС - правка файла /etc/rc.local. Неудача - после рестарта СПК вся папка /etc/ сбрасывается в заводскую, просто не помнит что я туда что-то дописывал.

Прошу помочь советом

Трофимов Артем
16.06.2015, 14:51
таск, что инициирует команду подвисает сразу после инициализации команды? или же выполняется, но с тормозами?
если второй вариант и Вы используете sysexec2 - сделайте например так

IF NOT entered THEN
sys_cmd(cmd:='nice -n 19 find /mnt/ufs/media/mmcblk0p1/*.csv -mmin +1 -exec nice -n 19 bzip2 {} \; &' , output_string=> , complete=> );
entered:=TRUE;
ELSE
sys_cmd(cmd:='');
END_IF

IF sys_cmd.complete THEN
(*необходимые действия *)
entered:=FALSE; (*для повтора команды*)
END_IF

Makarovas
16.06.2015, 15:35
Таск работает какое-то время, но по вачьдогу все вываливается в эксапшн.
Попробовал предложенный Вами способ - все так же.
Я смотрю через команду top загрузку процессора - моя задача почему-то получает наивысший приоритет когда вызывается из sysexec/sysexec2, а когда вызываю из консоли все ок.
18600

capzap
16.06.2015, 17:53
Есть SD карта куда валятся архивы в csv-шном формате, файл за сутки жиреет до 32 Мб, а так как в СПК линуск и есть средства сжатия bzip2, то почему бы не воспользоваться!
Составил значит я команду которая все мои csv-ншники найдет (кроме того который сейчас заполняется) и каждый сожмет в отдельный файл а исходный удалит.


nice -n 19 find /mnt/ufs/media/mmcblk0p1/*.csv -mmin +1 -exec nice -n 19 bzip2 {} \; &

Понизив приоритет этой задаче до минимального и запустив фоном через терминал putty, я с триумфом наблюдал что файлы сжимались (где-то 20-30 минут на каждый). Я был в восторге так как визуализация не сильно просела, а архивы стали весить 90кБ вместо 32Mb!

Но.

После того как я вшил эту команду в проект и стал вызывать её через SysExecute я что-то сразу же и приуныл. SysExecute ровно как и SysExecute2 запускают команду с таким ацким неизменяемым приоритетом что СПК практически перестает реагировать на что либо. И мои nice, renice никак не влияют на ситуацию.

Начал я думать как же быть... Вот коротко что я еще попробовал:

- запуск команды по расписанию средствами cron. Неудача - cron'а нету в линуксе СПК
- создание bash-скрипта и запуск его в фоне при старте ОС - правка файла /etc/rc.local. Неудача - после рестарта СПК вся папка /etc/ сбрасывается в заводскую, просто не помнит что я туда что-то дописывал.

Прошу помочь советом
1) почему бы команду архивирования не записать в скрипт, а из плк запускать не всю эту строку а созданный скрипт с низким приоритетом
2) скрипт с правами только для чтения разве пропадет из папки etc?
3) http://linux-freebsd.ru/linux/system/kak-ponizit-prioritet-programmyi-skripta-protsessa-v-debian-linux/ может еще ionice использовать?

Makarovas
16.06.2015, 19:36
1) так и сделано - но разницы нет никакой
2) вот как я делал:
- скрипт я положил в /mnt/ufs/root/arc.sh, сделал его исполняемым
- открыл файл /etc/rc.local и дописал туда в конец строки вызов скрипта в фоне /mnt/ufs/root/arc.sh &
- отключаю питание, включаю питание
- убеждаюсь что файл /etc/rc.local имеет исходное состояние
3) тут тоже облом - о ionice спк не знает

скрипт вот такой:



#!/bin/bash

while true
do
nice -n -19 find /mnt/ufs/media/mmcblk0p1/*.csv -mmin +1 -exec nice -n -19 bzip2 {} \;
sleep 24h
done

exit 0

murdemon
16.06.2015, 20:07
чтобы изменения etc сохранял с консоли набирай busybox reboot

capzap
16.06.2015, 20:07
открыл файл /etc/rc.local и дописал туда в конец строки вызов скрипта в фоне /mnt/ufs/root/arc.sh &попробуйте после внесения изменений выполнить команду chmod 544 /etc/rc.local , вдруг поможет
кроме того линукс в плк от овен любит исполнять правильно команды только при написании полного пути

Makarovas
16.06.2015, 20:36
Получилось сохранить etc: убрал атрибуты для записи rc.local (хз, может это лишнее было) и выполнил busybox reboot.

Всем спасибо!