Newsgroup: it.comp.lang.perl
Titolo: data e ora in script per CronJob

Ciao a tutti
chiedo a voi un saggio consiglio (sono programmatore PHP, non ho mai
visto righe scritte in Perl ;) ).
HO il seguente script che viene richiamato con cronJob ogni 10 giorni,
e serve per effettuare un backup del db mysql:
---------------------------
#!/usr/bin/perl
open(CONF, "/etc/webmin/miniserv.conf");
while(<CONF> ) {
$root = $1 if (/^root=(.*)/);
}
close(CONF);
$ENV{'WEBMIN_CONFIG'} = "/etc/webmin";
$ENV{'WEBMIN_VAR'} = "/var/webmin";
chdir("$root/mysql");
exec("$root/mysql/
backup.pl
", @ARGV);
---------------------------
il file di config presente nella stessa directory di questo script è
---------------------------
start_cmd=/etc/rc.d/init.d/mysqld start
access=*: *
mysqlimport=/usr/bin/mysqlimport
style=0
date_subs=0
perpage=25
stop_cmd=
mysqlshow=/usr/bin/mysqlshow
mysql=/usr/bin/mysql
mysqldump=/usr/bin/mysqldump
nodbi=0
add_mode=0
mysql_libs=
blob_mode=0
mysqladmin=/usr/bin/mysqladmin
sock=/var/lib/mysql/mysql.sock
port=
host=
login=root
pass=flvt01cs
backup_drop_=0
backup_before_=
backup_=/home/mysql/dbBackup
backup_tables_=
backup_after_=
backup_where_=
---------------------------
Sarebbe molto bello se riuscissi a far creare una cartella per ogni
volta che fa il backup, nominandola con il giorno e mese in cui esegue
l'operazione.
Con lo script presente ogni volta che avviene un backup, il sistema
sovrascrive le precedenti copie.
Mi piacerebbe ad esempio che nella directory principale in cui fa il
backup ci siano delle sottocartelle nominato per giornomese contenenti
i relativi file.
ad esempio
backup
- 20050101
- 20050110
- 20050120
ecc...
Grazie 1000
Vito

 il file di config presente nella stessa directory di questo script è
[cut]
Ciao Vito,
          il tuo file di configurazione recita:
backup_=/home/mysql/dbBackup
se questo e' il file che conterra' il backup
puoi modificare il tuo script come segue:
 #!/usr/bin/perl
 #la directory in cui vuoi creare i files di backup
 $myBackupDir = "/backup";
 open(CONF, "/etc/webmin/miniserv.conf");
 while(<CONF> ) {
 $root   = $1 if (^root=(.*));
 #ricavo il file di backup
 $backup = $1 if (^backup_=(.*));
 }
 close(CONF);
 $ENV{'WEBMIN_CONFIG'} = "/etc/webmin";
 $ENV{'WEBMIN_VAR'} = "/var/webmin";
 chdir("$root/mysql");
 #esegui il backup
 system("$root/mysql/
backup.pl
", @ARGV);
  #a questo punto il backup e' stato completato
  #e spostiamo il file nella directory di destinazione finale
  #ricaviamo la data odierna yyyymmdd;
  ($day,$mon,$year) = (localtime(time))[3,4,5];
  $data = sprintf("%04d%02d%02d",1900+$year,$mon+1,$mday);
  #creo la directory se non esiste
  mkdir "$myBackupDir/$data";
  rename "$backup","$myBackupDir/$data/dbBackup";
 
La filosofia e' semplice, prima fai il backup e poi copi il file
appena creato nella directory che hai scelto per i backup di oggi.
Allo script mancano i controlli di consistenza (ad esempio cosa fare
se non riesce a creare una directory?) ma comunque la traccia dovrebbe 
essere sufficiente a permetterti di completare agevolmente il tuo compito.
Nota: se vengono creati piu' file allora ti conviene forse tar-zipparli e
spostare il file ottenuto nella directory di backup.