Мой bash скрипт не работает, использовал команду mv.

Вопрос или проблема

Ниже приведен скрипт, созданный для перемещения файлов из одного места в другое.

#!/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: плохой интерпретатор: Нет такого файла или директории

Ответ или решение

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

Анализ проблемы

  1. Кодировка файла:
    Сообщение об ошибке bad interpreter: No such file or directory обычно указывает на проблемы с кодировкой файла. Это может быть связано с тем, что ваш сценарий был сохранен в формате Windows (CRLF), а на Unix-системах используется формат LF.

  2. Права доступа:
    Убедитесь, что у пользователя, под которым запускается cron-задание, есть необходимые права для выполнения скрипта и перемещения файлов в указанные директории.

  3. Проблемы с путями:
    Убедитесь, что указанные пути существуют, и у вас есть доступ к ним. Обратите внимание на замену значений "****" на фактические значения.

Решение

Исправление кодировки файла

  1. Выполните команду для преобразования файла:
    sed -i 's/\r$//' /home/ec2-user/Desktop/MoveCommand.sh

    Эта команда удалит все символы возврата каретки, преобразовав файл в формат Unix (LF).

Проверка прав доступа

  1. Проверьте права доступа на скрипт:

    ls -l /home/ec2-user/Desktop/MoveCommand.sh

    Убедитесь, что сценарий имеет права на выполнение (chmod +x /home/ec2-user/Desktop/MoveCommand.sh).

  2. Проверьте доступ к директориям:

    ls -ld /home/ftpuser /usr/local/mask_directory/Source/

    Если у crontab-задания недостаточно прав, используйте sudo или на время исполнения откорректируйте права.

Исправление путей и конфигурации crontab

  1. Убедитесь, что полнота пути верна и пути существуют:

    realpath /usr/local/mask_directory/Source/
    realpath /home/ftpuser/*.txt
  2. Проблема может быть и в детальной конфигурации crontab. Если MoveCommand.sh меняет какие-либо глобальные переменные окружения, убедитесь, что они экспортируются правильно.

Завершение и тестирование

  1. Перезапустите демон cron, чтобы убедиться, что изменения применились:

    sudo service cron restart

    или

    sudo systemctl restart cron
  2. Для тестирования корректной работы скрипта запустите его отдельно:

    /home/ec2-user/Desktop/MoveCommand.sh

Проведя эти шаги, вы сможете устранить проблемы с вашим bash-сценарием и убедиться, что файлы корректно перемещаются в заданные директории. Будьте внимательны в отношении прав доступа и кодировки файлов, так как это часто является причиной сбоев при выполнении скриптов.

Оцените материал
Добавить комментарий

Капча загружается...