Nik*_*014 5 cron shell-script files
我编写了一个简单的 shell 脚本来使用该mysqldump
命令备份我的数据库中的表。该命令只是将 DB 转储到dbName.sql
文件中。但是,如果该dbName.sql
文件尚不存在并且我 crontab 这个 shell 脚本,它就不起作用。可能是什么原因?是否不允许 crontab 脚本创建和写入文件?
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了。
也看看这些: