O escalonador provavelmente não sabe como expandir ~
, dando-lhe um caminho absoluto.
EDIT, após a solução encontrada:
Outra idéia que eu tive foi que talvez o cron estivesse ignorando a linha devido a todos *, mas eu não consegui replicar isso. Eu achei que é man page é um pouco inútil, mas a página da Wikipedia no cron é um pouco útil. Eu sugeriria usar a linha:
*/1 * * * * /home/joe/Desktop/foo/my_script # JOB_ID_3
como isso seria executado em */1
(ou seja, a cada minuto que divide por 1) se continuasse a falhar.