yarkov
@yarkov
Помог ответ? Отметь решением.

Как работает cron?

Пытаюсь заставить выполниться скрипт с помощью cron.
Есть юзер на сервере, назовем vpsuser
Есть в его домашней папке скрипт backup.sh
Если запустить
$ sudo ~/backup.sh >> ~/backup.log
, то все ОК, а вот так
* * * * * /home/vpsuser/backup.sh >> /home/vpsuser/backup.log

создается пустой /home/vpsuser/backup.log с правами root:root.
ЧЯДНТ?
======================================
#UPD1: Добавил скрипт backup.sh
/home/vpsuser/backup_sources
/home/vpsuser/backup.sh
/home/vpsuser/backup_sources
/home/vpsuser/createbare.sh
/home/vpsuser/.bash_aliases
/home/vpsuser/.bashrc
/home/vpsuser/.cdargs
/home/vpsuser/.gitconfig
/home/vpsuser/.profile
/home/vpsuser/.ssh
/home/vpsuser/.config
/home/vpsuser/crontab.backup
/home/vpsuser/letsencrypt
/home/vpsuser/mongodb
/etc/letsencrypt
/etc/ssh
/etc/nginx
/var/log/nginx
/var/www

/home/vpsuser/backup.sh
#!/bin/bash

set -e

shopt -s dotglob

# Цвет текста сообщения об ошибке
red=$(tput setf 4)
# Цвет текста сообщения об успешном выполнении
green=$(tput setf 2)
# Стандартный цвет текста консоли
reset=$(tput sgr0)
# Параметры, которые помещают уведомление о выполнении операции вправо
toend=$(tput hpa $(tput cols))$(tput cub 6)

TIMESTAMP=$(date +'%F_%R:%S' -d "-24 hour")
HOME=/home/vpsuser
NOW=$(date +%d-%m-%Y)
PROCESS_NAME=$(basename $0)
SOURCE_FILE="${HOME}/backup_sources"
BACKUP_FILE="${HOME}/backup_${NOW}.tar.gz"
CRONTAB_FILE="${HOME}/crontab.backup"
PID_FILE="$$.lock"
MONGO_DIR="${HOME}/mongodb"
PID_DIR=/var/run/${PROCESS_NAME}
TAR="$(which tar)"

if [ -f ${PID_DIR}/${PID_FILE} ]; then
	echo "${PROCESS_NAME} уже запущен!"
	exit 1
fi

function print_status {
    if [ $? -eq 0 ]; then
        echo -n "${green}${toend}[OK]"
    else
        echo -n "${red}${toend}[ERROR]"
    fi
    echo -n "${reset}"
    echo
}

function create_lock_file() {
	mkdir -p ${PID_DIR} && touch ${PID_DIR}/${PID_FILE}
}

function remove_lock_file() {
	[ -d ${PID_DIR} ] && rm -rf ${PID_DIR}
}

function create_mongo_dump() {
	mkdir -p ${MONGO_DIR}
	mongodump --gzip --out=${MONGO_DIR} &> /dev/null
}

function remove_mongo_dump() {
	if [ -d "${MONGO_DIR}" ]; then
		rm -rf ${MONGO_DIR}
	fi
}

function create_crontab_dump() {
	crontab -l > ${CRONTAB_FILE}
}

function remove_crontab_dump() {
	if [ -f "${CRONTAB_FILE}" ]; then
		rm -f ${CRONTAB_FILE}
	fi
}

function backup() {
	echo -n "Сохраняем бэкап в файл ${BACKUP_FILE}"
	${TAR} -czvf "${BACKUP_FILE}" -N"${TIMESTAMP}" -T"${SOURCE_FILE}" &> /dev/null
	print_status;
}


create_lock_file;
create_mongo_dump;
create_crontab_dump;

backup;

remove_crontab_dump;
remove_mongo_dump;
remove_lock_file;
  • Вопрос задан
  • 765 просмотров
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В backup.sh надо все файлы (и программы, и данные) указать с полным путём к ним или в crontab указать все необходимые пути поиска в PATH
Ответ написан
Комментировать
yarkov
@yarkov Автор вопроса
Помог ответ? Отметь решением.
Друзья, вы не поверите )))
Надо было закомментировать строку #set -e
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sashkets
@sashkets
Прекратил отвечать после 24.02.2022
может всетаки

* * * * * sh /home/vpsuser/backup.sh >> /home/vpsuser/backup.log

?

* * * * * - а это как читать?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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