终端可运行但Crontab中被截断的命令问题排查求助
问题原因及解决方案
核心问题:%字符未转义
crontab 中%是特殊字符,会被解析为换行符,同时将%之后的内容当作命令的标准输入。你的命令里的${0%.pcap,SDPerr}.pcap包含未转义的%,这直接导致crontab截断了命令,也就是日志里显示命令到${0就终止的原因。
次要问题:可能的crontab格式错误
- 如果是通过
crontab -e编辑的用户个人crontab,行内的user字段完全多余——个人crontab不需要指定执行用户,只有/etc/crontab这类系统级crontab才需要在时间字段后添加用户。 - 如果是系统级crontab,
user字段是合法的,但仍需处理%的转义问题。
修正后的命令
系统级crontab(/etc/crontab)
*/30 * * * * user find /home/user/recordings -name '*.pcap,SDPerr' -exec sh -c 'mv "$0" "${0\%.pcap,SDPerr}.pcap"' {} \;
用户个人crontab(crontab -e)
*/30 * * * * find /home/user/recordings -name '*.pcap,SDPerr' -exec sh -c 'mv "$0" "${0\%.pcap,SDPerr}.pcap"' {} \;
注意:直接使用双引号"即可,不要用HTML转义后的",crontab支持双引号,只要正确转义特殊字符。
内容的提问来源于stack exchange,提问作者Francois Rousseau
相关产品推荐
相关产品推荐

