Я желаю создать резервные копии сервера Minecraft, которым я управляю. Я записал сценарий удара, который выполняет ftp wget резервное копирование файлов сервера к новой папке.
Вот то, что сценарий:
TIMESTAMP=$(/bin/date +%Y-%m-%d_%H:%M)
/bin/mkdir /disks/Media/MC\ Server\ Backups/backup/$TIMESTAMP -p
cd /disks/Media/MC\ Server\ Backups/backup/$TIMESTAMP
/usr/bin/wget -r ftp://$FTP_USER:$FTP_PASS@$FTP_ADDR// -l 0 -nH
Переменные являются деталями соединения FTP-сервера и опущены по очевидным причинам. Когда я запускаю скрипт на своем собственном, он работает безупречно. Моя проблема заставляет это работать заданием крона, таким образом, резервные копии являются автоматическими. От терминальной работы /
, Я ввожу crontab -e
.
Я использую gedit для добавления задания крона:
1 4 * * * /disks/Media/MC\ Server\ Backups/ftp-backup.sh
Таким образом, это должно работать в 4:01 каждый день, но это не делает. Проблема то, что сценарий сохранен на смонтированном внешнем диске NTFS? Я надеялся видеть, создало ли задание крона резервную папку где-то в другом месте, но я не вижу другой.
Я добавил #!/bin/sh
к началу сценария. Я также выполнил chmod-x на самом сценарии. Я также попробовал два различных формата за запущение моего скрипта:
15 25 * * * /disks/Media/MC\ Server\ Backups/ftp-backup.sh &>/tmp/cronout.log
и
15 25 * * * /bin/sh /disks/Media/MC\ Server\ Backups/ftp-backup.sh &>/tmp/cronout.log
Последняя часть, как предполагается, регистрирует любые проблемы, все же эти файлы никогда не создаются вообще.
Я тестировал крон путем установки заданий, чтобы быть несколькими минутами в будущее.
При наблюдении, работает ли крон с этой командой: systemctl status cron
, Я получаю следующий вывод:
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: failed (Result: signal) since Sun 2019-12-22 12:20:27 EST; 2 weeks 3 days ago
Docs: man:cron(8)
Process: 1081 ExecStart=/usr/sbin/cron -f $EXTRA_OPTS (code=killed, signal=KILL)
Main PID: 1081 (code=killed, signal=KILL)
Dec 22 11:24:38 jlcarveth-MS-7A72 cron[1081]: (CRON) INFO (Running @reboot jobs)
Dec 22 11:30:01 jlcarveth-MS-7A72 CRON[3975]: pam_unix(cron:session): session opened for user jlcarveth by (ui
Dec 22 11:30:01 jlcarveth-MS-7A72 CRON[3976]: (jlcarveth) CMD (/bin/bash /disks/Media/MC\ Server\ Backups/ftp-
Dec 22 12:11:44 jlcarveth-MS-7A72 CRON[3975]: (CRON) info (No MTA installed, discarding output)
Dec 22 12:11:44 jlcarveth-MS-7A72 CRON[3975]: pam_unix(cron:session): session closed for user jlcarveth
Dec 22 12:17:01 jlcarveth-MS-7A72 CRON[11533]: pam_unix(cron:session): session opened for user root by (uid=0)
Dec 22 12:17:01 jlcarveth-MS-7A72 CRON[11534]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Dec 22 12:17:01 jlcarveth-MS-7A72 CRON[11533]: pam_unix(cron:session): session closed for user root
Dec 22 12:20:27 jlcarveth-MS-7A72 systemd[1]: cron.service: Main process exited, code=killed, status=9/KILL
Dec 22 12:20:27 jlcarveth-MS-7A72 systemd[1]: cron.service: Failed with result 'signal'.
Из того, что я могу сказать, крон не работает правильно, но IDK, как исправить это.
Не уверенный, что я изменил, но следующее, кажется, работает: 50 16 * * * /disks/Media/MC\ Server\ Backups/ftp-backup.sh
Несколько вещей.
&>/tmp/cronout.log
только зарегистрирует stdout, не stderr. Амперсанд, вероятно, повреждает это также. Вы хотите 2>&1 >/tmp/cronout.log
перенаправить stderr в stdout и stdout в файл.
Ваш сценарий не имеет никакой хижины. Первая строка должна читать #!/bin/bash
Действительно ли файл является исполняемым файлом? chmod +x /disks/Media/MC\ Server\ Backups/ftp-backup.sh