sqlite Cron作业没有访问文件的权限,但shell脚本有

ngynwnxp  于 2023-11-21  发布在  SQLite
关注(0)|答案(1)|浏览(243)

我整理了一个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.shsh 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.0
  • bash 3.2.57

我错过了什么?

p5cysglq

p5cysglq1#

解决方案是授予cron完整的磁盘访问权限,如this answer中所述,由@GordonDavisson在上面的评论中分享。
更多细节,对于那些谁发现自己在这里:
1.打开系统偏好设置>安全和隐私>隐私选项卡
1.在左侧菜单中找到“完整磁盘访问”
1.如果cron在右侧列表中可用,只需选中该框并保存新设置。

  • 如果cron * 不在右侧列表中(较长版本,带图片here):
  • 单击右侧列表下方的“+”图标
  • search(cmd + shift + g)for /usr/sbin
  • 选择cron从这个文件夹&“打开”
  • 保存设置

相关问题