我整理了一个shell脚本,我想按计划执行。除此之外,它读取一个SQLite DB文件,并对该数据执行一些操作。我在获取DB文件的权限时遇到了麻烦。
脚本my-job.sh
中的问题行是:
sqlite3 -json -header "/path/to/MyDatabase.db" < "/path/to/ExportScript" > "/path/to/save/output.json"
字符串
如果我运行bash my-job.sh
或sh my-job.sh
,脚本工作正常。当cron作业运行时,我看到以下错误(我将cron作业输出保存到一个文件中以调试此错误):
Error: unable to open database "/path/to/MyDatabase.db": authorization denied
型
我尝试过的事情:
- 我已经将
MyDatabase.db
的权限设置为:664、666、777等。 - 我已经以root用户身份登录(
sudo su -
)并在那里设置了一个新的cron作业。从后台手动运行脚本可以工作,但新的cron作业以同样的方式失败。 - 对于两个用户(我自己和root用户),我都尝试在crontab文件的顶部设置
SHELL=/bin/bash
。
其他可能相关的细节:
- MacOS 12.7
sqlite3
3.37.0bash
3.2.57
我错过了什么?
1条答案
按热度按时间p5cysglq1#
解决方案是授予
cron
完整的磁盘访问权限,如this answer中所述,由@GordonDavisson在上面的评论中分享。更多细节,对于那些谁发现自己在这里:
1.打开系统偏好设置>安全和隐私>隐私选项卡
1.在左侧菜单中找到“完整磁盘访问”
1.如果
cron
在右侧列表中可用,只需选中该框并保存新设置。cron
* 不在右侧列表中(较长版本,带图片here):/usr/sbin
cron
从这个文件夹&“打开”