Отслеживайте и выполняйте с помощью inotifywait, но делайте это в очереди.

Как правило, «невозможно выполнить... Нет такого файла или каталога» означает, что либо сам исполняемый двоичный файл , либо одна из необходимых ему библиотек не существует. Библиотеки также могут нуждаться в других библиотеках.

Чтобы увидеть список библиотек, необходимых для указанного исполняемого файла или библиотеки, вы можете использовать команду ldd:

$ ldd /usr/local/bin/i686-elf-gcc

Если результирующий список содержит такие строки, как

<library name> => not found

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

В этом случае библиотеки могут находиться в /usr/local/libили /usr/local/lib64, но по какой-то причине этот каталог не включен в путь поиска библиотек.

Если вы хотите, чтобы дополнительные библиотеки были доступны только для определенных программ или сеансов, вы можете использовать переменную среды LD _LIBRARY _PATH, чтобы указать дополнительный путь (s ), который следует искать. для отсутствующих библиотек. Это сведет к минимуму вероятность конфликтов с системными библиотеками по умолчанию.

Но если вы хотите добавить каталог библиотеки в системный путь поиска библиотек по умолчанию, вы должны добавить его в файл /etc/ld.so.confили создать файл /etc/ld.so.conf.d/*.confпо вашему выбору, а затем запустить команду ldconfigот имени пользователя root. для обновления кэша поиска библиотеки.

Например, если отсутствующие библиотеки найдены в /usr/local/lib64и существует каталог /etc/ld.so.conf.d, вы можете создать файл crosscompiler.conf, подобный этому:

# echo "/usr/local/lib64" > /etc/ld.so.conf.d/crosscompiler.conf
# ldconfig
0
14.01.2020, 18:26
1 ответ

Несколько лет назад я проделал подобный процесс на работе. У меня был общий ресурс samba на Linux, принимающий файлы, и целью было переместить оттуда видеофайлы в другой каталог и обработать их с помощью ffmpeg, а затем загрузить на YouTube. Я не могу опубликовать код скриптов, так как у меня его больше нет (Я сменил работу )но могу дать вам несколько советов :вам нужно отправить новый файл по каналу(man mkfifo)и дополнительный скрипт для «чтения» строк из этого канала в цикле.

Таким образом, вы получите по крайней мере два сценария: один для запуска inotifywaitдля отправки нового имени файла в конвейер и дополнительный сценарий для чтения канала и запуска процесса, который вам нужен (в вашем случае, загрузить с помощьюrclone). Любой новый добавленный файл будет помещен в канал и будет ожидать файла. Первый сценарий должен следить за новыми файлами и отправлять их вторичному сценарию как можно скорее.

т.е.:

#!/bin/bash
cd ~/rtorrent/readytoupload/
inotifywait -m ~/rtorrent/readytoupload -s ~/rtorrent/log.txt -e create -e moved_to |
while read path action file; do
   echo "The file '$file' appeared in directory '$path' via '$action'"
   # I'm not entirely sure about the & placement here, if its neccesary at all,
   # but the goal is to prevent a block while the secondary script is working on another file.
   echo ${file} > /tmp/mypipe &
done

и пример сценария второго дня:

#!/bin/bash
while true ; do
    if read line < /tmp/mypipe ; then
        echo $line
        # your rclone command goes here.
    fi
loop

Скобки нужны для того, чтобы имена файлов с пробелами не интерпретировались как несколько параметров. вы должны цитировать их так "${file}".

Если вы хотите запустить сценарий после запуска компьютера, вам понадобится третий сценарий для выполнения этой работы, я рекомендую использовать su -cс &для запуска сценариев демонов из rc.localили любого подобного сценария. запускается из(/etc/rc.dили/etc/init.d).

1
08.10.2020, 00:24

Теги

Похожие вопросы