This notifies users by email (sendmail) when a particular file changes on a Unix-style filesystem. This was originally written for a page that was being modified by multiple people in the wiki software shipped with Apple’s OS X Server. This worked all right as a hack, but if you need extensive content management or granular permissions, I’d find a more sophisticated platform than Apple’s wiki.
#!/usr/bin/perl -cw # # Check for updates to page.html, send email if 'modified' timestamp is within last 24 hours # Put your file paths and email addresses here, example: $file = "/Library/Collaboration/Groups/OurGroup/page.html"; $email_to = "me@yahoo.com"; $cc_to = "you@yahoo.com"; $email_from = "them@yahoo.com"; $URL = "usable web link to the page"; # set some default values my $now = time; $. = 0; # Determine how old the file is my $mtime = (lstat $file)[9]; my @diff = reverse +(gmtime $now - $mtime)[0 .. 5]; # Adjust year and day for Unix epoch $diff[0] -= 70; $diff[2]--; # Determine if maintainer made the last change open (FILE, "</Library/Collaboration/Groups/OurGroup/page.plist"); do { $LINE = <FILE> } until $. == 18 || eof; #print $LINE; $LINE =~ s/^s+//; $LINE =~ s/s+$//; $LINE =~ s/<string>//; $LINE =~ s/</string>//; close FILE; # Put your file owner and mail recipients here if ($diff[2] < 1 and $diff[1] < 1 and $diff[0] < 1 and $LINE ne "JohnDoe") { # i.e., file is less than 1 year, 1 month, and 1 day old, # and wasn't last updated by the maintainer $mailto = $email_to; $mailcc = $cc_to; $mailfrom = $email_from; $mailsubject = "Schedule Updated"; $time_interpolation = sprintf("%d year%s, %d month%s, %d day%s, %d hour%s, %d minute%s and %d second%s", map { $_ == 1 ? ($_, '') : ($_, 's') } @diff); $mailbody = "The schedule ($URL) was modified in the last 24 hours.nnThe new schedule is $time_interpolation old.nnIt was last updated by $LINE."; &sendEmail($mailto, $mailcc, $mailfrom, $mailsubject, $mailbody); #print("$mailto, $mailcc, $mailfrom, $mailsubject, $mailbody"); } else { die(); } sub sendEmail { my ($to, $cc, $from, $subject, $message) = @_; my $sendmail = '/usr/sbin/sendmail'; open(MAIL, "|$sendmail -oi -t"); print MAIL "From: $fromn"; print MAIL "To: $ton"; print MAIL "Cc: $ccn"; print MAIL "Subject: $subjectnn"; print MAIL "$messagen"; close(MAIL); }