Поверните журналы немого неинтерактивного приложения

Используйте 'netstat-lnp|grep ":80", чтобы видеть, слушает ли что-нибудь на порте 80.

Как Bill Weiss упомянул, Вам будет нужно к ssh к удаленному полю как корень так, чтобы у Вас было разрешение связать с портом под 1 024.

Кроме того, Вам будет нужен GatewayPorts, включенный в sshd_config на общедоступном сервере. Без этого sshd только позволит этому связывать с петлевым адресом.

GatewayPorts Указывает, позволяют ли удаленным хостам соединиться с портами, переданными для клиента. По умолчанию sshd связывает передачи удаленного порта с петлевым адресом. Это препятствует тому, чтобы другие удаленные хосты соединились с переданными портами. GatewayPorts может использоваться, чтобы указать, что sshd должен позволить передачам удаленного порта связывать с непетлевыми адресами, таким образом позволив другим хостам подставить - nect. Аргумент может быть no'' to force remote port forward- ings to be available to the local host only,да'', чтобы вынудить передачи удаленного порта связать с подстановочным адресом, или clientspecified'' to allow the client to select the address to which the forwarding is bound. The default isнет''.

Кроме того, 'http://www.myurl.com/' в Вашем примере должен также просто быть именем хоста (без http://)

8
задан 10 October 2010 в 14:17
4 ответа

Ответ Ignacio заинтриговал меня так, я провел некоторое исследование и придумал сценарий Perl ниже. Если Ваш сервис запишет в именованный канал, он должен работать и применим с logrotate.

Чтобы это работало, необходимо превратить файл журнала в именованный канал. Переименуйте существующий файл затем

mkfifo /var/log/something.log

и отредактировать эти 3 имен файлов для соответствия требованиям. Выполните свой сервис затем этот демон, который должен считать именованный канал и записать это в новый файл журнала.

Если Вы переименовываете /var/log/somethingrotateable.log затем отправьте ПОНУКАНИЕ демону, которого оно породит само и создаст новое somethingrotateable.log записать в. При использовании logrotate a postrotate сценарий kill -HUP 'cat /var/run/yourpidfile.pid'

#!/usr/bin/perl -w
use POSIX ();
use FindBin ();
use File::Basename ();
use File::Spec::Functions;
#
$|=1;
#
# Change the 3 filenames and paths below to meet your requirements.
#
my $FiFoFile = '/var/log/something.log';
my $LogFile = '/var/log/somethingrotateable.log';
my $PidFile = '/var/run/yourpidfile.pid';

# # make the daemon cross-platform, so exec always calls the script
# # itself with the right path, no matter how the script was invoked.
my $script = File::Basename::basename($0);
my $SELF = catfile $FindBin::Bin, $script;
#
# # POSIX unmasks the sigprocmask properly
my $sigset = POSIX::SigSet->new();
my $action = POSIX::SigAction->new('sigHUP_handler',$sigset,&POSIX::SA_NODEFER);
POSIX::sigaction(&POSIX::SIGHUP, $action);

sub sigHUP_handler {
#    print "Got SIGHUP";
    exec($SELF, @ARGV) or die "Couldn't restart: $!\n";
   }

#open the logfile to write to
open(LOGFILE, ">>$LogFile") or die "Can't open $LogFile";
open(PIDFILE, ">$PidFile") or die "Can't open PID File $PidFile";
print PIDFILE "$$\n";
close PIDFILE;
readLog();

sub readLog {
sysopen(FIFO, $FiFoFile,0)  or die "Can't open $FiFoFile";
while ( my $LogLine = <FIFO>) {
    print LOGFILE $LogLine;
   }
}
5
ответ дан 2 December 2019 в 22:51

Журнал к FIFO, затем выполняет демона, который соединяется с другой стороной FIFO и имеет обработчики сигналов, которые позволяют Вам поворачивать журнал.

7
ответ дан 2 December 2019 в 22:51

Отправьте SIGSTOP в процесс, скопируйте журнал в другое имя, усеките журнал, отправьте SIGCONT в процесс, возможно, как это:

pkill -STOP legacyappname
cp /var/log/something.log /var/log/something.log.backup
cat /dev/null > /var/log/something.log
pkill -CONT legacyappname

У Вас мог также быть logrotate, делают волшебство для Вас с тщательно обработанным пред и отправляют сценарии вращения и copytruncate опцию, как так:

/var/log/something {
    daily
    rotate 5
    copytruncate
    prerotate
        # This assumes you have a pid file, of course.
        # If you don't, this could instead be a pkill like above.
        kill -STOP `cat /var/run/legacyappname.pid`
    endscript
    postrotate
        kill -CONT `cat /var/run/legacyappname.pid`
    endscript
}
2
ответ дан 2 December 2019 в 22:51

Вы могли попытаться позволить журналу приложения к именованному каналу и иметь некоторую программу (например, системный-журнал-ng), который поддерживает надлежащие механизмы вращения журнала, читает записи в журнале и регистрируют их в файл.

1
ответ дан 2 December 2019 в 22:51

Теги

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