1

我正在尝试从 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 文件夹中并运行命令 files: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。请帮忙!

4

1 回答 1

0

按照你的要求

而不是使用您自己的crontab,您必须通过您的命令使用特定用户的crontab :sudocrontab

须藤-s

然后

crontab -e

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

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

一旦完成

exit

sudo -s www-data 

... 等等...

或(如果您无法在 下运行 shell www-data):

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

注意:这将覆盖www-data 的crontab仅这一行!为了防止这种情况,您可以:

sudo www-data crontab -l

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

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

为了添加你的行,最后

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

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

但它可能更简单

sudo vi /etc/cron.d/mybackups

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

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

进一步的文档

man -P'less +/SYSTEM' 5 crontab

于 2017-03-14T19:16:19.280 回答