This is a complement to Seff's answer above.
Couldn't place it in a comment because it's too long
/system/etc/init.d
is not always guaranteed to work. In my case it did not. There are other methods mentioned in the following link in case this one didn't work for you https://android.stackexchange.com/questions/6558/how-can-i-run-a-script-on-boot/196785
Even then crond didn't run any job for me.
To debug the errors I killed the running instance pkill crond
and ran it like that
crond -f -d0 -c /data/crontab/
This make crond run in forground and print all the debugging information.
When I ran it like that I got this warning
crond: crond (busybox 1.27.2-Stericson) started, log level 0
crond: ignoring file 'root' (no such user)
So I had to create a passwd file with entry for root
echo 'root:x:0:0:root:/data:/system/bin/sh' > /system/etc/passwd
Even then, it still failed with error like
crond: job: 0 /system/bin/ls
crond: child running /bin/sh
crond: can't execute '/bin/sh' for user root
Please note that no where in my cronjob did I mentioned "/bin/sh". This seems to be hard coded in the binary.
Next I added the following lines to my init script
/system/xbin/mount -o remount,rw /
/system/xbin/ln -s /system/bin/ /bin
/system/xbin/mount -o remount,ro /
and that's it.
It worked fine after that