ms-dred
@ms-dred
Вечно что то не то и что то не так...

Как создавать новый лог файл каждую неделю?

В ubuntu можно сказать что новичок, не могу разобраться как создавать новый лог файлов
На системе запущен node.js и npm forever, запускаю проект следующим образом
service app start
содержание app
#!/bin/bash
# see: https://github.com/nodejitsu/forever
# Based on:
# https://gist.github.com/3748766
# https://github.com/hectorcorrea/hectorcorrea.com/blob/master/etc/forever-initd-hectorcorrea.sh
# https://www.exratione.com/2011/07/running-a-nodejs-server-as-a-service-using-forever/

TIMESTAMP=`date +%F-%H%M`
NAME="Site.RU"
NODE_BIN_DIR="/usr/local/bin/node"
NODE_PATH="/usr/local/lib/node_modules"
APPLICATION_PATH="/media/user/web/node/site/bin/www"
PIDFILE="/var/run/site.ru.pid"
LOGFILE="/media/user/web/node/site/log/log-$TIMESTAMP.log"
MIN_UPTIME="5000"
SPIN_SLEEP_TIME="2000"
 

PATH=$NODE_BIN_DIR:$PATH
export NODE_PATH=$NODE_PATH
export NODE_ENV=production
 
start() {
    echo "Starting $NAME"
    forever \
      --pidFile $PIDFILE \
      -a \
      -l $LOGFILE \
      --minUptime $MIN_UPTIME \
      --spinSleepTime $SPIN_SLEEP_TIME \
      start $APPLICATION_PATH 2>&1 > /dev/null &
    RETVAL=$?
}
 
stop() {
    if [ -f $PIDFILE ]; then
        echo "Shutting down $NAME"
        # Tell Forever to stop the process.
        forever stop $APPLICATION_PATH 2>&1 > /dev/null
        # Get rid of the pidfile, since Forever won't do that.
        rm -f $PIDFILE
        RETVAL=$?
    else
        echo "$NAME is not running."
        RETVAL=0
    fi
}
 
restart() {
    stop
    start
}
 
status() {
    echo `forever list` | grep -q "$APPLICATION_PATH"
    if [ "$?" -eq "0" ]; then
        echo "$NAME is running."
        RETVAL=0
    else
        echo "$NAME is not running."
        RETVAL=3
    fi
}
 
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status
        ;;
    restart)
        restart
        ;;
    *)
        echo "Usage: {start|stop|status|restart}"
        exit 1
        ;;
esac
exit $RETVAL


Как я понял время создания файла кешируется и новый файл лога по времени не создается. Помогите реализовать ведение лога с созданием нового файла каждую неделю.
  • Вопрос задан
  • 2417 просмотров
Решения вопроса 1
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
Можно вообще не мучаться с языком программирования - разберитесь что такое встроенная служба logrotate, которая как раз и занимается этим.
logrotate может ротировать логи как общаясь с приложением (посылая ему команды переоткрыть файл), так и самостоятельно делая truncate.

Почитайте краткий мануал и гляньте в инете несколько примеров конфигураций. Если что, спросите в каментах конкретнее.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Обычно задачи ведения логов и их ротации разделяют: приложение/демон только ведёт лог в файле со сконфигурированным названием, а при получении специального сигнала закрывает текущий файловый дескриптор журнального файла и открывает новый.
logrotate занимается ротацией логов, переименовывая их и посылая сигнал приложению.
Вероятно в системах с systemd за это отвечает не logrotate а какая-то приблуда systemd.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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