Как правило, «невозможно выполнить... Нет такого файла или каталога» означает, что либо сам исполняемый двоичный файл , либо одна из необходимых ему библиотек не существует. Библиотеки также могут нуждаться в других библиотеках.
Чтобы увидеть список библиотек, необходимых для указанного исполняемого файла или библиотеки, вы можете использовать команду 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
Несколько лет назад я проделал подобный процесс на работе. У меня был общий ресурс 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
).