mirror of
https://github.com/webmin/webmin.git
synced 2025-08-16 14:51:18 +00:00
54 lines
1.1 KiB
Perl
Executable File
54 lines
1.1 KiB
Perl
Executable File
#!/usr/local/bin/perl
|
|
# view_log_progress.cgi
|
|
# Returns progressive output for some system log
|
|
|
|
require './logviewer-lib.pl';
|
|
&ReadParse();
|
|
&foreign_require("proc", "proc-lib.pl");
|
|
|
|
# Send headers
|
|
print "Content-Type: text/plain\n\n";
|
|
|
|
# Follow and reverse are mutually exclusive
|
|
my @systemctl_cmds;
|
|
{
|
|
local $config{'reverse'} = 0;
|
|
@systemctl_cmds = &get_systemctl_cmds(1);
|
|
}
|
|
|
|
# System log to follow
|
|
my ($log) = grep { $_->{'id'} eq $in{'idx'} } @systemctl_cmds;
|
|
if (!&can_edit_log($log) ||
|
|
!$log->{'cmd'} ||
|
|
$log->{'cmd'} !~ /^journalctl/) {
|
|
print $text{'save_ecannot3'};
|
|
exit;
|
|
}
|
|
|
|
# Disable output buffering
|
|
$| = 1;
|
|
|
|
# No lines for real time logs
|
|
$log->{'cmd'} =~ s/\s+\-\-lines\s+\d+//;
|
|
|
|
# Show real time logs
|
|
$log->{'cmd'} .= " --follow";
|
|
|
|
# Add filter to the command if present
|
|
my $filter = $in{'filter'} ? quotemeta($in{'filter'}) : "";
|
|
if ($filter) {
|
|
$log->{'cmd'} .= " --grep $filter";
|
|
}
|
|
|
|
# Open a pipe to the journalctl command
|
|
my $pid = open(my $fh, '-|', $log->{'cmd'}) ||
|
|
print &text('save_ecannot4', $log->{'cmd'}).": $!";
|
|
|
|
# Read and output the log
|
|
while (my $line = <$fh>) {
|
|
print $line;
|
|
}
|
|
|
|
# Clean up when done
|
|
close($fh);
|