我正在尝试从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。请帮忙!
答案 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...