sh脚本可以手动工作,但不能通过cron工作

时间:2017-03-14 17:24:18

标签: shell server cron ubuntu-16.04 nextcloud

我正在尝试从crontab运行sh脚本。如果我手动运行脚本它工作正常,但是当我在crontab中运行它时,我会收到错误。

剧本:

#!/bin/bash
sudo tar -zcvf /var/www/nextcloud/data/nextcloud/files/backup.tar.gz /home/beno/stuff/
sudo -u www-data /usr/bin/php /var/www/nextcloud/occ file:scan --all >> /var/www/nextcloud/data/nextcloud/files/backup_log.txt

该脚本应该对文件夹进行tar备份并将其放在nextcloud文件夹中并运行命令文件:scan,所以nextcloud重新扫描文件系统并启动同步...我在这里阅读: https://doc.owncloud.org/server/9.0/admin_manual/configuration_server/occ_command.html#file-operations-label

当crontab运行脚本时,会创建backup.tar.gz,然后出现以下错误:

An unhandled exception has been thrown: 
Doctrine\DBAL\DBALException: Failed to connect to the database: An exception occured in driver: SQLSTATE[HY000] [2002] No such file or directory in /var/www/nextcloud/lib/private/DB/Connection.php:60

我正在使用ubuntu16和nextcloud11。请帮忙!

1 个答案:

答案 0 :(得分:0)

按照您的要求

您不必使用自己的 crontab ,而必须使用特定用户的 crontab sudo 您的{{ 1}}命令:

sudo -s

然后

crontab

现在你可以添加 root 的第一行:

crontab -e

一旦完成

tar -zcvf /var/www/nextcloud/data/nextcloud/files/backup.tar.gz /home/beno/stuff/

......等等......

或(如果你不能在 exit sudo -s www-data 下运行一个shell):

www-data

注意:这只会覆盖 www-data的 crontab ! 为了防止这种情况,您可以:

sudo www-data crontab <<<'01 2 * * * /usr/bin/php /var/www...'

查看包含实际crontab的内容,然后

sudo www-data crontab -l

添加你的行,最后

sudo www-data crontab -l |
    sed -e '$a 01 2 * * * /usr/bin/php /var/www...'

用修改后的crontab替换实际的crontab。

可能更简单
 sudo www-data crontab -l |
    sed -e '$a 01 2 * * * /usr/bin/php /var/www...' |
    sudo www-data crontab

然后按照用户名的时间规范添加你的规则:

sudo vi /etc/cron.d/mybackups

进一步的文件

请参阅21 22 * * * root tar -zcvf /var/w... 22 23 * * * www-data /usr/bin/php /var/www...