抱歉,我可能是这里的新手,我从未真正运行过任何 cron 作业。
无论如何,我正在运行一个 Arch Linux 服务器,上面运行着 cronie,并且我已经设置了这个 cron 作业:
10 * * * * sh /home/cron/CronScripts/svnbackup.sh
这应该会触发脚本“svnbackup.sh”。但是,当我 tail -f 日志时,它显示以下错误:
十二月 16 12:00:01 Aramis /usr/sbin/crond[536]: (root) 无法打开 (/etc/crontab): 打开的文件过多 十二月 16 12:00:01 Aramis /usr/sbin/crond[536]: (CRON) OPENDIR 失败 (/etc/cron.d): 打开的文件过多 十二月 16 12:00:01 Aramis /usr/sbin/crond[536]: (CRON) OPENDIR 失败 (/var/spool/cron): 打开的文件过多
如果我直接运行该脚本,它会运行良好并且执行它应该执行的操作,那么 cron 无法运行它的原因是什么?
任何帮助都将非常有帮助。
谢谢!
答案1
这不是你的脚本的问题,而是你的系统的问题。正如你可能从错误中猜到的那样,似乎打开了太多文件。
检查 /proc/sys/fs/file-max 以查看当前限制。如果限制太低,可以使用 sysctl 重置。此外,在 /etc/sysctl.conf 中添加一行以在下次启动时进行设置:
file-max=65536
(例如)
答案2
使用以下命令检查系统通配符限制:
cat /proc/sys/fs/file-max
以及您的个人限制:
ulimit -n
您还可以检查使用什么文件打开
lsof