Не уверен, запущено ли задание cron

Как правило, также будет устройство /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
1
13.04.2021, 19:03
2 ответа

Согласно комментариям , скрипт только может исполняться владельцем. То есть не читается. Это останавливает владельца от выполнения скрипта.

Пример:

$ 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
2
28.04.2021, 22:52

Задания, выполняемые через 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.

1
28.04.2021, 22:52

Теги

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