Wenn Du ein Programm via cron startest, dann hast Du noch nicht Deine normalen Umgebungsvariablen geladen.
Z.B. $PATH wurde noch nicht komplett gesetzt.
D.h. Du müsstest evtl am Anfang des Scriptes Deine .profile laden
Am Anfang des scriptes (erste Zeile) tut auch eine sog. shebang Zeile gut. Da steht dann der Pfad des zu verwendenden Befehlsinterpreters drin.
Also:
#!/usr/bin/bash
Damit solltest Du dann auf die explizite Angabe des Interpreters (sh) verzichten können.
Wenn Dein Programm nicht explizit root-rechte benötigt, dann solltest Du besser auf das sudo verzichten. Alex hat damit schon recht.
Gruss Ralf