Using launchd to update MacPorts
You probably put the plist in ~/Library/LaunchAgents/. Since /opt/local is owned by root:wheel (that's at least the default), you don't have the proper permissions to write to certain necessary folders (e.g. /opt/local/var/macports/sources/rsync.macports.org/release/tarballs/tmp). The log files (i.e. /var/log/org.macports.selfupdate.log/err) neither can be created, because only root can write to /var/log/.

So run the selfupdate service as launch daemon:


Remove the launch agent from the launchd database:

launchctl remove org.macports.selfupdate

Move the plist to /Library/LaunchDaemons/:

sudo mv ~/Library/LaunchAgents/org.macports.selfupdate.plist /Library/LaunchDaemons/org.macports.selfupdate.plist

Modify owner and permissions:

sudo chown root:wheel /Library/LaunchDaemons/org.macports.selfupdate.plist
sudo chmod 644 /Library/LaunchDaemons/org.macports.selfupdate.plist

Load the daemon:

sudo launchctl load /Library/LaunchDaemons/org.macports.selfupdate.plist



Such launch daemon is run with root permissions and can update MacPorts data as well as write to /var/log/.