我尝试使用以下命令将我的 Crontab 备份到文件:crontab -l > backup/crontab
。但这只会在目录中创建空文件backup
,并且不会将输出打印到终端。该命令的退出代码是0
。
如果我crontab -l
不进行重定向,我会得到预期的输出:
/5 * * * * /path/to/script
...
为什么我的命令无法将 Crontab 内容写入文件,我应该做什么才能使这项工作正常进行?
我正在使用 Centos7.7
并安装了以下版本的 Cron 软件包:
crontabs-1.11-6.20121102git.el7.noarch
cronie-1.4.11-23.el7.x86_64
cronie-anacron-1.4.11-23.el7.x86_64
我用的外壳是GNU bash, version 4.2.46
.
编辑:
[user@host ~]$ crontab -l > backup/crontab
[user@host ~]$ ll backup
total 248K
drwx------. 28 user user 4,0K 31.10. 09:30 .
drwxr-xr-x. 7 user user 4,0K 1.10. 12:58 ..
-rw-rw-r--. 1 user user 0 31.10. 09:30 crontab
...
备份是本地目录并具有以下 Selinux 策略:staff_u:object_r:user_home_t:s0
.
编辑2:
crontab -l > /tmp/crontab
工作和其他位置,我也有写访问工作,但当目标位于我的主目录内时,它会失败。我想知道是否selinux
是造成这种情况的原因。
答案1
要忠实地重定向控制台输出,请将输出保存为字符串,并使用引号绝对保留内容,如下所示:
echo "$(crontab -l)" > backup/crontab
或者,根据评论(我考虑得不够快,抱歉!)
printf "%s\n" "$(crontab -l)" > backup/crontab
这可以防止以任何方式解释重定向的输出...例如, crontab 示例开头的正斜杠。请注意,“echo -e”将解释转义序列 - 例如。像 \n、\r、\t 等字符 - 所以使用不带开关的“echo”。
在大多数系统上,您使用的简单重定向(crontab -l > 文件名)应该就可以了。