Ваш метод крона на правильном пути.. большинство других методов имеет различные проблемы безопасности. Для создания той же самой идеи быстрее Вы могли коснуться файла и использовать inotify, чтобы обнаружить, что это было изменено. inotify чрезвычайно быстр. 'inotify-инструменты' являются легко доступным набором инструментов командной строки то использование inotify. Существуют некоторые хорошие примеры на сайте GitHub для inotify-инструментов.
От: https://github.com/rvoicilas/inotify-tools/wiki/#wiki-info
#!/bin/sh
EVENT=$(inotifywait --format '%e' ~/file1)
[ $? != 0 ] && exit
[ "$EVENT" = "MODIFY" ] && echo 'file modified!'
[ "$EVENT" = "DELETE_SELF" ] && echo 'file deleted!'
Это в основном мгновенно - inotify, функция ядра, которую эти инструменты используют в своих интересах который запросы уведомления о ядре на очень определенных событиях файловой системы.
Я думаю, что это очевидно, но
typeset -i M=1
while [ $M -le 102 ]
do
mount mysourcedevice$M targetdir$M &
let M++
done
wait
Должен сделать задание. wait
будет ожидать, пока все sub-processess не закончены, прежде, чем выполнить следующую команду.
Возможно, потоковая версия могла быть немного быстрее, необходимо корректироваться mount()
параметры самостоятельно.
#include <stdio.h>
#include <pthread.h>
#include <sys/mount.h>
#include <string.h>
#include <errno.h>
#define DEVS 100
static void *mountt(void *d)
{
int i = (int)d;
char loop[48], mp[48];
snprintf(loop, 47, "/dev/loop%d", i);
snprintf(mp, 47, "/mnt/%d", i);
if (mount(loop, mp, "ext2", MS_MGC_VAL | MS_RDONLY | MS_NOSUID, "") < 0)
fprintf(stderr, "mount[%d]: failed: %s\n", i, strerror(errno));
return NULL;
}
int main(int argc, char **argv)
{
int i;
pthread_t tt[DEVS];
for (i=0; i<DEVS; i++) {
if (pthread_create( &tt[i], NULL, mountt, (void*)i) != 0)
fprintf(stderr, "thread create[%d] failed: %s\n", i, strerror(errno));
}
for (i=0; i<DEVS; i++)
pthread_join(tt[i], NULL);
return 0;
}
gcc -O2 -Wall -o mountt mountt.c -lpthread
При использовании GNU Parallel это выглядит так:
seq 100 | parallel -j0 mount device{} dir{}
Если у вас есть список каталогов:
parallel -j0 mount device{#} {} ::: dirs*
Если у вас есть список устройств:
parallel -j0 'mkdir -p dir{#}; mount {} dir{#}' ::: device*
GNU Parallel - это общий распараллеливатель, который упрощает параллельное выполнение заданий на одной или нескольких машинах, к которым у вас есть доступ по ssh. Часто может заменить цикл на
.
Если у вас есть 32 различных задания, которые вы хотите запустить на 4 процессорах, простой способ распараллеливания - запустить 8 заданий на каждом процессоре:
GNU Parallel вместо этого порождает новый процесс, когда один из них завершается, - поддерживая активность процессоров и тем самым экономя время:
Установка
Если GNU Parallel не упакован для вашего дистрибутива, вы можете выполнить персональную установку, для которой не требуется root-доступ. Это можно сделать за 10 секунд, выполнив следующие действия:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
Другие варианты установки см. http://git.savannah.gnu.org/cgit/parallel.git/tree/README
Подробнее
] См. Другие примеры: http://www.gnu.org/software/parallel/man.html
Посмотрите вступительные видеоролики: https://www.youtube.com/playlist?list= PL284C9FF2488BC6D1
Ознакомьтесь с руководством: http://www.gnu.org/software/parallel/parallel_tutorial.html
Подпишитесь на список рассылки, чтобы получить поддержку: https: // lists .gnu.org / mailman / listinfo / parallel
mount
управляйте сто раз), это обычно не практично. – frostschutz 12.08.2013, 14:04