4

I want the cronjob to do some things as the superuser, and depending on the result, launch an app as me, the logged-in user.

I've tried a bunch of things but nothing I think should work does.

Similar questions:

1 Answers1

2

I figured out the key was to use su with -l, -c and single quotes:

su -l myloginname -c '/usr/bin/open -a [App].app'

In context:

*/15 * * * * root if { !  /usr/bin/diff  /var/tmp/foo /var/backups/bar >> /var/log/foobar-diff.log ; } ; \
then  /usr/bin/su -l myloginname -c '/usr/bin/open -a /Applications/iProcrastinate.app > /dev/null 2> /dev/null' ; \
/bin/date >> /var/log/foobar-diff.log ; fi
  • To be a nitpicker, this is an UNIX-style solution: creating a launchd LaunchDaemon would be the ideal method (giving you the ability to easily suspend these launches and resume them on demand if such a need would arise, too) :) – Ryccardo Apr 03 '13 at 22:35
  • You say 'UNIX-style solution' like it's a bad thing.

    IMO it's much easier to suspend these launches and resume them on demand by commenting and uncommenting the relevant line.

    I thought stackexchange wasn't the place for religious wars!

    – WHO'sNoToOldRx4Covid-CENSORED Apr 04 '13 at 20:37
  • 1
    It isn't inherently a bad solution at all (just like I prefer manually created symlinks to Finder aliases); it's just a different way with some advantages and some disadvantages, almost like opening a currently selected file with Command+O, Command+Down, double clicking, the File menu or the contextual menu :) – Ryccardo Apr 04 '13 at 21:06