Как создать каталог в Perl, который включает текущую метку времени как EPOCH - PullRequest
0 голосов
/ 29 декабря 2010

Структура директории, которую я создаю, такова:

my $startTime = `date +%s`;
my $startTime2 = $startTime + 10;
chomp($startTime2);
print "startTime2: " . "$startTime2";
my $pwd = getcwd();

#my $PWD=system("pwd");
print "Current Working Directory: " . "$pwd\n";
my $logdir = "$pwd" . "/load-logs";
print "Log Directory: " . "$logdir\n";
#chmod( 755, $logdir ) or die "Couldn't chmod $logdir: $!";

mkdir("$logdir/$startTime2", 777) || print $!;
#print "start Time in epoc : "."$startTime";
#mkdir("$startTime3", 777) || print $!;
#system("mkdir \$logdir/$startTime");

my $reqlogfile  = "$logdir/$startTime2/req.log";
print "reqlogfile: " . "$reqlogfile\n";
my $resplogfile = "$logdir/$startTime2/resp.log";
print "resplogfile: " . "$resplogfile\n";

сейчас, mkdir ("$ logdir / $ startTime2", 777) || печать $ !; не создает каталог с текущим значением $ startTime2 в $ logdir

1 Ответ

1 голос
/ 29 декабря 2010

Возможно, проблема в том, что ваш $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/.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...