In almost all cases, failure of cron'ed script that otherwise run fine stem from two causes: 1) The need to set and export environment variables including PATH that are not set by cron's intentionally sparse environemnt. 2) The failure of a command that expects stdin to be an interactive device (e.g a terminal).
2) can be addressed by the test
if [ -t 0 ]
then
echo "Interactive"
else
echo "Batch"
fi
A typical error occurs with a cron'ed su - user command. The - sources user's .profile and it almost always have commands like tset and stty that expect a terminal.
If it ain't broke, I can fix that.