setting PATH in user crontab

I’m using Ansible 1.6.3 to manage a user-specific crontab. This job runs a command which, as a part of the script, calls another script located in /usr/local/bin, which is not in cron’s default PATH on Debian systems.

#Ansible: do something
0 9 * * * /home/admin/bin/do-something >~/logs/do-something.log 2>&1

The script fails because it can’t find the command called within do-something in /usr/local/bin. The right way to fix this is to set PATH in the crontab, but I can’t see a way to do that with ansible’s cron module.

What’s the right way to solve this with Ansible?

I don’t see why you think it would be looking in /usr/local/bin as you have hard coded the path above.

In my application, I create a user specific crontab entry in /etc/cron.d/user. I then use the lineinfile module to set HOME=“/tmp” (insertbefore=BOF). From there on out, when using the cron module, I specify cron_file=/etc/cron.d/user.

I think that’d work for your case…

Depends on what cron implementation you are using. If vixie-cron, you can literally put PATH in the crontab line (not that I really recommend this). If cronie you can put environment variables at the top of crontab files but they apply to all commands there. This also works with vixie-cron.

If your cron is a really old one or extremely basic (or if you want to support basically every cron implementation out there), then you have to create a wrapper script that will be on the crontab line.

On the machine type you are targeting man 5 crontab and read all of it.