我需要定期运行这个 lp 命令:
lp /Users/denniscook/Documents/PrinterManagement/UseInk.pdf 2>&1 >>/Users/denniscook/.cronlogs/runPrinter.log
我在 runPrinter.zsh 脚本中有这个命令:
#!/usr/bin/env zsh
cat >>/Users/denniscook/.cronlogs/runPrinter.log <<EOF
***************************
Enter Job `date`
EOF
lp /Users/denniscook/Documents/PrinterManagement/UseInk.pdf 2>&1 >>/Users/denniscook/.cronlogs/runPrinter.log
cat >> /Users/denniscook/.cronlogs/runPrinter.log <<EOF
Exit Job `date`
EOF
当直接在终端中发出时,或者当在终端中发出脚本时(意味着打印机打印并更新日志),lp 命令会正确执行。但是,当从 cron 运行命令或脚本时,两者都不起作用。
在 crontab 中,我使用下面的 crontab 尝试了两种方法,注释掉一个条目并使用另一个条目。第一个将运行脚本,第二个尝试直接运行命令。
#-----------#
# cron jobs #
#-----------#
#06 11 * * * /Users/denniscook/.scripts/runPrinter.zsh
13 11 * * * lp /Users/denniscook/Documents/PrinterManagement/UseInk.pdf 2>&1 >>/Users/denniscook/.cronlogs/runPrinter.log
~
~
当从终端执行脚本并且它正常工作时,日志条目为:
***************************
Enter Job Sun Jan 29 11:07:26 HST 2023
request id is EPSON_WorkForce_845-1286 (1 file(s))
Exit Job Sun Jan 29 11:07:26 HST 2023
当cron执行脚本时,日志条目如下(lp cmd无输出):
***************************
Enter Job Sun Jan 29 12:15:00 HST 2023
Exit Job Sun Jan 29 12:15:00 HST 2023
当cron直接执行lp命令时,没有日志条目。
我不知道 cron 执行作业和我在终端中执行它们之间有什么区别。我的研究未能找到答案。
我很感激任何帮助...
答案1
问题是 cron 进程没有完整的磁盘访问权限。
解决方案:
- 转到“设置”>“安全和隐私”,然后在左侧列表中选择“完全磁盘访问”。
- 单击加号按钮添加新应用程序。
- 在文件浏览器中键入正斜杠以切换到直接输入模式。输入路径
/usr/sbin/cron
。 (通过在终端上输入“which cron”找到它)
或者使用 Automator 代替 cron。 (如果你想学习一个新工具,但这听起来很烦人......)
(这个答案在评论中,我只是将其作为正式答案发布在这里,这样下一个人就不必阅读所有评论来获得答案。感谢 gpaCook 分享最终解决方案。)