macos上未执行cronjob

macos上未执行cronjob,macos,cron,Macos,Cron,此操作应在每天凌晨1点运行一次: 0 1 * * * pod repo update | while IFS= read -r line; do printf '%s %s\n' "$(date)" "$line"; done >> /Users/ci/podRepoUpdate.log 2>&1 但是日志(/Users/ci/podrepoopdate.log)保持为空 如果我运行命令 pod repo update | wh

此操作应在每天凌晨1点运行一次:

0 1 * * * pod repo update | while IFS= read -r line; do printf '%s %s\n' "$(date)" "$line"; done >> /Users/ci/podRepoUpdate.log 2>&1
但是日志(
/Users/ci/podrepoopdate.log
)保持为空

如果我运行命令

pod repo update | while IFS= read -r line; do printf '%s %s\n' "$(date)" "$line"; done >> /Users/ci/podRepoUpdate.log 2>&1

手动操作,它可以工作。我在这里遗漏了什么?

将命令放在shell脚本中工作正常,正如所建议的那样。这是我的crontab:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 1 * * * /Users/ci/podRepoUpdate.sh
shell脚本:

#!/bin/sh -e

pod repo update | ts '[%Y-%m-%d %H:%M:%S]' >> /Users/ci/podRepoUpdate.log 2>&1

对于调度作业,最好使用。正如文档所述,尽管仍然支持cron,但并不推荐使用cron。在crontab条目中,
%
的工作方式有点像换行符,除非您对其进行转义。为了避免这种混乱,我建议将命令放在shell脚本中,然后从cron(或者更好的是launchd)运行它。实际上,我一直在使用launchd,但我更熟悉unix cron作业。这就是我想使用常规cron作业的原因@GordonDavisson感谢你给我的提示。我将命令放在shell脚本中,现在它们可以工作了。如果你把你的评论作为回答,我很乐意接受。