При вызове из cron «subprocess.Popen» в скрипте не работает

Вы можете создать полный -раздел на GPT-диске с помощью этих команд.У меня есть немного расширенная версия pdiskв качестве стандартной утилиты на большинстве моих систем.

# Create a simple function pdisk to hide some of the complexity of parted
pdisk() {
    local dsk="$1"; shift; [[ $# -eq 0 ]] && set -- print;
    parted "$dsk" --align optimal unit MiB "$@";
}

# We are going to DESTROY and REFORMAT /dev/sdz. Change to suit your removable disk
dsk=/dev/sdz

pdisk "$dsk" mklabel gpt                   # GPT disk label (you may get asked for confirmation)
pdisk "$dsk" mkpart primary ntfs 1 100%    # Create a single partition for the entire disk
pdisk "$dsk"                               # Show what we have done

partprobe "$dsk"                           # Generate the partition devices
mkfs -t ntfs "${dsk}"*1                    # Format partition 1 as NTFS (if you must)

Если вы хотите безопасно поэкспериментировать, не ломая реальный диск, используйте такой временный файл на диске вместо наглого dsk=/dev/sdzвыше.

dd if=/dev/zero bs=1M count=100 >100m.img  # Create 100MB "disk" image
dsk=$(losetup --show --find 100m.img)      # Associate a loopback device
echo "$dsk"                                # Report what it is called

Затем, когда вы закончите,

losetup -d "$dsk"                          # Disassociate the loopback device(s)
rm "$dsk"                                  # You know
-1
23.09.2021, 10:55
1 ответ

Задания выполняются с помощью cronили systemdсценариев запуска, которые не выполняются в той же среде выполнения, что и на вашем рабочем столе. systemdсценарии запуска запускаются как root. Ни одно из ваших изменений PATHили другие настройки переменных среды из ~/.bashrcне распространяются автоматически на ваше задание cron. Например, $DISPLAYнет, поэтому программы с графическим интерфейсом требуют специальной обработки (читатьman xhost).

Можно установить переменные среды для всех своих cronзаданий в файле crontab. Прочтите man 5 crontab.

Посмотрите на результаты echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";aliasв каждой из ваших сред.

Поскольку часть commandстроки crontabпо умолчанию интерпретируется как /bin/sh, который имеет более простой синтаксис, чем /bin/bash, я рекомендую, чтобы commandбыл вызовом bashскрипт (исполняемый, смонтированный, начинается с #!/bin/bash), который настраивает среду, а затем вызывает нужную программу.

-3
23.09.2021, 13:36

Теги

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