Thursday, 6 September 2018

macos - Why are my at jobs running immediately on OS X?


I want to schedule events for exact times in Mac OS X. It seems like the 'at' command is the simplest way to do this.


I have enabled atrun using the command:


launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

To test at, I'm using the following one-line BASH script:


echo 'foo' >> path/to/log.txt | at now + 2 minutes

When I run the script, I get output like:


job 17 at Sat May 15 12:57:00 2010

where '12:57:00' is indeed 2 minutes in the future. But the echo command executes immediately: the line 'foo' is added to log.txt right away.


How can I make at work for me?



Answer



You're doing it wrong. at reads commands from stdin as text, it cannot magically know them from a pipeline.


Your command...


echo 'foo' >> path/to/log.txt | at now + 2 minutes

...runs both echo and at at the same time, in a pipeline. (Think cat somefile | grep sometext) So at would receive the word foo on its stdin. However, the output of echo is redirected to a file, so at does not receive anything.




The correct command would be:


echo "echo 'foo' >> path/to/log.txt" | at now + 2 minutes

No comments:

Post a Comment

Where does Skype save my contact's avatars in Linux?

I'm using Skype on Linux. Where can I find images cached by skype of my contact's avatars? Answer I wanted to get those Skype avat...