我编写了一个简单的 shell 脚本来使用该命令备份数据库中的表mysqldump
。该命令只是将数据库转储到dbName.sql
文件中。但是,如果该dbName.sql
文件尚不存在并且我 crontab 该 shell 脚本,则它不起作用。可能是什么原因? crontab 脚本是否不允许创建和写入文件?
答案1
Cron 作业可以以 root 或其他指定用户身份运行。如果该用户没有写入.sql
文件的权限,作业将失败。
如果该文件存在并且运行该作业的用户具有写入权限,则该文件将被写入。
如果文件不存在并且用户没有在目标目录中创建文件的权限,则作业将失败。
我通常可以说
sudo touch /var/log/foo.log
sudo chown my_username /var/log/foo.log
现在我可以说:
echo bar > /var/log/foo.log
但如果该文件不存在,它将失败,因为我无权在/var/log/
.
因此,问题是运行作业的用户是否有权在mysqldump
写入输出的位置创建文件。
现在,如果我设置一个 cron 作业来运行一个脚本:
date > /var/log/foo.log
每分钟,我都可以添加:
* * * * * my-user-name /path/to/script
至/etc/crontab
。由于我没有权限在 /var/log/ 中创建文件,因此当作业失败时,cron 守护程序将向我发送一封电子邮件。
1 分钟后没有文件。我进入终端并输入mail
:
$ mail
>N 1 Cron Daemon Sat Jan 31 05:15 19/731 Cron <user@host> /path/to/script
? type
...
/path/to/script: line 3: /var/log/foo.log: Permission denied
好的。我的错。我创建了该文件并将其 chown 给我。现在一切都OK了。
也看看这些: