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

Nik*_*014 5 cron shell-script files

我编写了一个简单的 shell 脚本来使用该mysqldump命令备份我的数据库中的表。该命令只是将 DB 转储到dbName.sql文件中。但是,如果该dbName.sql文件尚不存在并且我 crontab 这个 shell 脚本,它就不起作用。可能是什么原因?是否不允许 crontab 脚本创建和写入文件?

Run*_*ium 2

Cron 作业可以以 root 或其他指定用户身份运行。如果该用户没有写入文件的权限,.sql作业将失败。

如果该文件存在并且运行该作业的用户具有写入权限,则该文件将被写入。

如果文件不存在并且用户没有在目标目录中创建文件的权限,则作业将失败。

我通常可以说

sudo touch /var/log/foo.log
sudo chown my_username /var/log/foo.log
Run Code Online (Sandbox Code Playgroud)

现在我可以说:

echo bar > /var/log/foo.log
Run Code Online (Sandbox Code Playgroud)

但如果该文件不存在,它将失败,因为我无权在/var/log/.

因此,问题是运行作业的用户是否有权在写入输出的位置创建文件mysqldump


现在,如果我设置一个 cron 作业来运行一个脚本:

date > /var/log/foo.log
Run Code Online (Sandbox Code Playgroud)

每分钟,我都可以添加:

*  *    * * *   my-user-name  /path/to/script
Run Code Online (Sandbox Code Playgroud)

/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
Run Code Online (Sandbox Code Playgroud)

好的。我的错。我创建了该文件并将其 chown 给我。现在一切都OK了。


也看看这些: