Crontabbed shell 脚本无法创建/写入文件

Crontabbed shell 脚本无法创建/写入文件

我编写了一个简单的 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了。


也看看这些:

相关内容