Демон, которого Вы описываете, мог использовать inotify.
Но возможно использование find
и wc -l
уже было бы достаточно быстро?
Я только запустил один быстрый тест, но существует значительная разница между time ls -lR /mm/|grep -c jpg
(real 0m2.168s
) и time find /mm -type f -name \*jpg|wc -l
(real 0m0.397s
) в моей системе. Оба возврата приблизительно 42 000 файлов, таким образом, различие на больших каталогах, вероятно, было бы больше.
(Я выполнял обе команды несколько раз для исключения эффектов кэширования диска.)
Отбросьте sudo
его не нужное начиная с его выполнения как корень и sudo привычкой по умолчанию, выполненной без tty.
Можно сказать sudo работать без tty путем выполнения visudo
и комментирующий requiretty:
#Default requiretty
ОБРАТИТЕ ВНИМАНИЕ, что это действительно имеет недостатки безопасности, посмотрите здесь
Если необходимо запустить программу во время начальной загрузки, самый легкий путь на большинстве установок состоит в том, чтобы добавить команду к /etc/rc.local
. Если файл существует, добавьте эту строку к нему:
python /path/to/lightpaint-FF.py &
Если файл не существует, попытайтесь создать его с содержанием
#!/bin/sh
python /path/to/lightpaint-FF.py &
exit 0
Несколько встроенных дистрибутивов не поддерживают /etc/rc.local
. Если тот, который Вы используете, не делает, говорит нам, каково это.
Если необходимо контролировать программу и повторно запустить ее, если она умирает, можно сделать это через init
. То, как сделать это, зависит, на котором init Ваше распределение использует.
Для традиционного init добавьте строку к /etc/inittab
. BusyBox может поддерживать inittab, но это - дополнительная функция, которая должна быть выбрана во время компиляции.
lp:2345:respawn:/usr/in/python /path/to/lightpaint-FF.py
Для выскочки запишите новомодное задание] (http://upstart.ubuntu.com/getting-started.html).