Проблема со сценарием оболочки, запущенным на crontab \ n, не работает - PullRequest
0 голосов
/ 29 июня 2019

Я работаю над заданием cron, чтобы проверить и восстановить файлы ark, если требуется.Мне нужно получить самый большой размер файлов .ark, и если файл .TheIsland.ark будет меньше, он автоматически выполнит резервное копирование и скопирует самый большой размер.Теперь, когда у меня есть эта отработанная сторона crontab, одна часть скрипта завершается неудачей.

Что означает:

actualmap=$(find $PWD -type f -printf '%p\n' -name "*.ark"| sort -nr | head -1)

Если я удаляю \ n, это на самом деле работает, но затем он не может сортировать междуих как то нет в отдельных строках.

Вывод, который я получаю в задании cron с \ n:

/srv/daemon-data/da4aaa1b-0ce9-46d2-bd60-5f599cc089ae/ShooterGame/Saved/recovery.sh (which is the recovery script)

Эта же строка кода, запущенная в терминале, выдает правильный вывод:

/srv/daemon-data/da4aaa1b-0ce9-46d2-bd60-5f599cc089ae/ShooterGame/Saved/SavedArks/TheIsland_NewLaunchBackup.bak

Без \ n используя crontab я получаю:

/srv/daemon-data/da4aaa1b-0ce9-46d2-bd60-5f599cc089ae/ShooterGame/Saved/SavedArks/TheIsland_27.06.2019_21.46.20.ark/srv/daemon-data/da4aaa1b-0ce9-46d2-bd60-5f599cc089ae/ShooterGame/Saved/SavedArks/TheIsland_28.06.2019_15.15.34.ark

Я приложил полный код, который работает вручную.

#!/bin/bash
export DISPLAY=:0.0

##ARK Map Recovery Script
cd /srv/daemon-data/da4aaa1b-0ce9-46d2-bd60-5f599cc089ae/ShooterGame/Saved/SavedArks

#Check file size of current ark map
file=TheIsland.ark
echo $file
currentsize=$(wc -c <"$file")
echo $currentsize

#Find biggest map file.
actualmap=$(find $PWD -type f -printf '%p\n' -name "*.ark"| sort -nr | head -1)>/srv/daemon-data/da4aaa1b-0ce9-46d2-bd60-5f599cc089ae/ShooterGame/Saved/SavedArks/log.txt
echo $PWD
echo $actualmap
biggestsize=$(wc -c < "$actualmap")
echo $biggestsize

if [ $currentsize -ge $biggestsize ]; then
    echo No map recovery required as over $biggestsize bytes
else
    echo Uh Oh! size is under $biggestsize bytes Attempting map recovery
    echo Checking for Backup dir and creating if necessary
    mkdir -p BackupFiles

    #Move old map into backup dir in the saved location
    echo Moving old Map File to backup dir
    mv $file BackupFiles

    #Stop server using docker commands
    echo Stopping servers

    docker kill da4aaa1b-0ce9-46d2-bd60-5f599cc089ae
    #Copy biggest map file with correct name
    echo Copying backup file
    cp $actualmap $file
fi  

1 Ответ

1 голос
/ 29 июня 2019

Использование опции -printf для команды find здесь не требуется.-print отлично подойдет.

Я получаю желаемый результат (найти возвращаемые найденные имена файлов, по одному на строку) с помощью этого:

find $PWD -type f -name "*.ark" -print. 

С -printf, %p в любом случае дает вам имя файла.

От man find: -принт True; выводит полное имя файла на стандартный вывод, за которым следует новая строка .

Опция -print уже делает то, что вы хотите сделать.

...