Как правило, также будет устройство /dev/mtdblockN, по одному на каждый раздел MTD. Это блочные устройства, которые вы можете использовать с nanddump, dd, mount и т. д.
Вам нужно создать каталог точки монтирования, например, (mkdir -p /media/mnt ). Тогда это зависит от того, какую файловую систему использует ваш раздел NAND. Например, у меня есть два раздела UBIFS NAND, и я буду использовать такие команды, как:
/usr/bin/ubiattach /dev/ubi_ctrl -m <MTD_partition> -O <block_size>
/bin/mount -t ubifs ubi1:rootfs0 /media/mnt
Если раздел не имеет файловой системы (, такой как образ ядра ), то nanddump будет работать.
nanddump -f /tmp/mtd0.bin /dev/mtdblock0
Если раздел представляет собой флэш-память данных (ИЛИ ), тогда dd будет работать.
dd if=/dev/mtdblock1 of=/tmp/mtd1.bin
Согласно комментариям , скрипт только может исполняться владельцем. То есть не читается. Это останавливает владельца от выполнения скрипта.
Пример:
$ chmod 500 script
$ ls -l script
-r-x------ 1 myself myself 24 Apr 14 09:21 script
$./script
hello
$ chmod 100 script
$ ls -l script
---x------ 1 myself myself 24 Apr 14 09:21 script
$./script
/bin/bash:./script: Permission denied
Если файл сценария недоступен для чтения, он не может быть прочитан bash
интерпретатором оболочки (, работающим под текущим пользователем ).
Сделайте сценарий исполняемым и доступным для чтения.
Помимо вышесказанного, рассмотрите возможность использования правильных двойных кавычек для расширений переменных и не разбирайте вывод изls
(действительно полезно только посмотреть на).
Ваш скрипт, модифицированный:
#!/bin/bash
backup_dir=/var/app/backups
storage_account_url=https://myserver/backups
{
# Find most recently modified file in "$backup_dir".
# Assumes that there are only files there, no subdirectories.
set -- "$backup_dir"/*
backup_file_path=$1
shift
for pathname do
if [ "$pathname" -nt "$backup_file_path" ]; then
backup_file_path=$pathname
fi
done
if [ ! -e "$backup_file_path" ]; then
echo 'There are no backups to synchronize'
exit 1
fi
# Perform backup.
azcopy login --identity || exit 1
azcopy copy "$backup_file_path" "$storage_account_url/$(basename "$backup_file_path")"
} >/tmp/cron.backup-script.$$ 2>&1
Задания, выполняемые через cron
, или at
, или batch
, не выполняются в той же среде выполнения, что и на вашем рабочем столе. Ни одно из ваших изменений PATH
или других настроек переменных среды не распространяется автоматически на ваше задание cron
. Например, $DISPLAY
нет, поэтому программы с графическим интерфейсом требуют специальной обработки (читатьman xhost
).
Можно установить переменные среды для всех своих cron
заданий в файле crontab
. Прочтите man 5 crontab
.
Посмотрите на результаты echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
в каждой из ваших сред.
Поскольку часть command
строки crontab
по умолчанию интерпретируется /bin/sh
, которая имеет более простой синтаксис, чем /bin/bash
, я рекомендую, чтобы command
был вызовом bash
скрипт (исполняемый, смонтированный, начинается с #!/bin/bash
), который настраивает среду, а затем вызывает нужную программу.
Всегда используйте абсолютные пути (пути, начинающиеся с /
, корневой каталог )в сценариях, выполняемых через cron
, at
, batch
.