在crontab中,如果设置一个定时任务echo 123 &> log.txt
,会发现执行完成后,cat log.txt
为空。
但在bash中,如果执行echo 123 &> log.txt
,执行完成后,cat log.txt
会打印123。
这是因为在crontab中,所有的任务都是通过sh -c "your_task"
来执行的,而在ubuntu中,sh指向的是dash。
而dash并不支持&>
这种语法,只支持2&>1
。
所以为了保持一致性,可以在crontab中以/bin/bash -c "your task"
的格式定义你的任务。除此以外,也要注意crontab任务运行时使用的环境变量和在交互式shell中的不同。