Вопрос или проблема
Ниже приведен скрипт, созданный для перемещения файлов из одного места в другое.
#!/bin/bash
mv -f /home/ftpuser/*.txt /usr/local/********/Source/
# Я попробовал вышеуказанный скрипт, и в crontab он показывает, что он был выполнен, но на самом деле файл не переместился из одного места в другое.
# Crontab
*/5 * * * * root /user/local/********/encrypt.sh
*/3 * * * * root /home/ec2-user/Desktop/MoveCommand.sh
i) encrypt.sh
xport PATH=$PATH:/usr/local/mask_directory/jdk1.8.0_221/jre
set JAVA_HOME=”/usr/local/mask_directoryjdk1.8.0_221/jre”
set PATH=%JAVA_HOME%\bin;%PATH%
java -classpath “/usr/local/mask_directory/bcpg-jdk16-1.46.jar:/usr/local/mask_directory/lib/bcpro$
Скрипт перемещения домашнего каталога
#!/bin/bash
mv -f /home/ftpuser/*.txt /usr/local/mask_directory/Source/
ii) Mask_Directory
-rwxr-xr-x 1 root root 424 Dec 2 11:26 encrypt.sh
MoveCommand.sh
-rwxrwxrwx 1 ec2-user ec2-user 75 Dec 24 13:55 MoveCommand.sh
iii) Уточнение директории
Пакет расположен в usr директории для шифрования файлов, и я не могу изменить путь.
iv) bin/sh: /home/ec2-user/Desktop/MoveCommand.sh: /bin/bash^M: плохой интерпретатор: Нет такого файла или директории
Ответ или решение
Проблема в вашем сценарии перемещения файлов, вероятно, связана с несколькими факторами, которые можно устранить, следуя нижеописанным шагам.
Анализ проблемы
-
Кодировка файла:
Сообщение об ошибкеbad interpreter: No such file or directory
обычно указывает на проблемы с кодировкой файла. Это может быть связано с тем, что ваш сценарий был сохранен в формате Windows (CRLF), а на Unix-системах используется формат LF. -
Права доступа:
Убедитесь, что у пользователя, под которым запускается cron-задание, есть необходимые права для выполнения скрипта и перемещения файлов в указанные директории. -
Проблемы с путями:
Убедитесь, что указанные пути существуют, и у вас есть доступ к ним. Обратите внимание на замену значений "****" на фактические значения.
Решение
Исправление кодировки файла
- Выполните команду для преобразования файла:
sed -i 's/\r$//' /home/ec2-user/Desktop/MoveCommand.sh
Эта команда удалит все символы возврата каретки, преобразовав файл в формат Unix (LF).
Проверка прав доступа
-
Проверьте права доступа на скрипт:
ls -l /home/ec2-user/Desktop/MoveCommand.sh
Убедитесь, что сценарий имеет права на выполнение (
chmod +x /home/ec2-user/Desktop/MoveCommand.sh
). -
Проверьте доступ к директориям:
ls -ld /home/ftpuser /usr/local/mask_directory/Source/
Если у crontab-задания недостаточно прав, используйте
sudo
или на время исполнения откорректируйте права.
Исправление путей и конфигурации crontab
-
Убедитесь, что полнота пути верна и пути существуют:
realpath /usr/local/mask_directory/Source/ realpath /home/ftpuser/*.txt
-
Проблема может быть и в детальной конфигурации crontab. Если
MoveCommand.sh
меняет какие-либо глобальные переменные окружения, убедитесь, что они экспортируются правильно.
Завершение и тестирование
-
Перезапустите демон cron, чтобы убедиться, что изменения применились:
sudo service cron restart
или
sudo systemctl restart cron
-
Для тестирования корректной работы скрипта запустите его отдельно:
/home/ec2-user/Desktop/MoveCommand.sh
Проведя эти шаги, вы сможете устранить проблемы с вашим bash-сценарием и убедиться, что файлы корректно перемещаются в заданные директории. Будьте внимательны в отношении прав доступа и кодировки файлов, так как это часто является причиной сбоев при выполнении скриптов.