cron 调度 sh 脚本时出错

cron 调度 sh 脚本时出错

这是我想要使用 cron job 来调度的 shell 脚本。

解析器

#!/bin/bash

source .profile
workon venv
cd /home/ashish/deployments/myproject

export DJANGO_SETTINGS_MODULE=myproject.settings_production
python /home/ashish/deployments/myproject/myproject/manage.py parse_data

Cron 任务-

*/15 * * * * . /home/ashish/parser.sh

每当这个 cron 作业运行时,我都会收到一封包含错误的邮件:

/bin/sh: 6: /home/ashish/parser.sh: source: not found
/bin/sh: 7: /home/ashish/parser.sh: workon: not found
Traceback (most recent call last):
  File "/home/ashish/deployments/myproject/myproject/manage.py", line 8, in <module>
    from django.core.management import execute_from_command_line
ImportError: No module named django.core.management

当我从终端运行此脚本时

. parser.sh    #this gives no error

sh parser.sh   #this gives errors
/bin/sh: 6: /home/ashish/parser.sh: source: not found
/bin/sh: 7: /home/ashish/parser.sh: workon: not found

该脚本中可能存在什么错误?

答案1

*/15 * * * * . /home/ashish/parser.sh

cron使用sh,而不是bash,因此当您获取脚本(这就是 所做的.)时,它将在 下运行sh,而不是bash。删除.

此外,PATHcron 的命令也有限制。请指定您使用的命令的完整路径,例如workon,或者PATH自行设置。

答案2

要像在您自己的帐户上运行一样运行脚本(使用 bash),请将您的 crontab 更改为以下内容:

*/15 * * * * sudo -u ashish /home/ashish/parser.sh

这将运行脚本,就像您在自己的帐户上从命令行执行它一样。

相关内容