Возможно, проблема в том, что ваш $logdir
не был создан, поэтому лучше убедиться, что он создан.
Кроме того, лучше всего убедиться, что umask
сброшен, так что если вы chmod
до 0777
, родительская оболочка umask
не мешает umask
в скрипте.
Perl mkdir
не работает как mkdir -p
оболочки (которая создает промежуточныйкаталоги, если они не существуют).Можно использовать mkpath
из File :: Path или просто убедиться, что промежуточный путь создан, как я покажу ниже:
use strict;
use warnings;
use Cwd;
my $start_time = time; # equivalent to `date +%s`, less a shell out ;)
my $start_time_2 = $start_time + 10;
umask 000; # ensure the permissions you set are the ones you get
my $pwd = getcwd();
print "Current Working Directory: $pwd\n";
my $logdir = "$pwd/load-logs";
print "Log Directory: $logdir\n";
mkdir $logdir
or die "Cannot mkdir $logdir: $!"
unless -d $logdir ;
chmod 0755, $logdir or die "Cannot chmod 0755 $logdir: $!";
mkdir("$logdir/$start_time_2", 0777)
or die "Cannot mkdir $logdir/$start_time_2: $!"
unless -d "$logdir/$start_time_2";
my $reqlogfile = "$logdir/$start_time_2/req.log";
print "reqlogfile: $reqlogfile\n";
my $resplogfile = "$logdir/$start_time_2/resp.log";
print "resplogfile: $resplogfile\n";
Вышеуказанное (со строгими предупреждениями и т. Д.) Работает для меня:
~/t$ perl t.pl
Current Working Directory: /home/mf/t
Log Directory: /home/mf/t/load-logs
reqlogfile: /home/mf/t/load-logs/1293636556/req.log
resplogfile: /home/mf/t/load-logs/1293636556/resp.log
Запуск его несколько раз не умирает, а создает каталоги (и chmods их) при необходимости.Вы можете проверить это через ls -la load-logs/
.