Autoreload.pm 849 B

123456789101112131415161718192021222324252627282930313233343536
  1. package Trog::Autoreload;
  2. use strict;
  3. use warnings;
  4. use feature qw{signatures};
  5. use Linux::Perl::inotify;
  6. use Trog::Utils;
  7. sub watch_for_changes ( $dir, $interval=5 ) {
  8. my $inf = Linux::Perl::inotify->new([qw{NONBLOCK}]);
  9. my @dirs = ($dir);
  10. my @wds;
  11. foreach my $directory (@dirs) {
  12. # Recursive scan for directories and setting up inotifies
  13. push(@dirs, _readdir( $directory ));
  14. DEBUG("Watching $directory for changes");
  15. push(@wds, $inf->add( path => $directory, events => [qw{CREATE MODIFY}] ));
  16. }
  17. while (!$inf->read()) {
  18. sleep $interval;
  19. }
  20. INFO("Change in $dir detected");
  21. Trog::Utils::restart_parent();
  22. exit 0;
  23. }
  24. sub _readdir ( $dir ) {
  25. opendir(my $dh, $dir);
  26. my @dirs = grep { -d $_ && !m/^\.+$/ } readdir($dh);
  27. closedir($dh);
  28. return @dirs;
  29. }