我在root crontab文件中使用sudo crontab -e创建了一个cron作业列表(见下文)。当我在命令行上单独运行命令时,它们工作正常,但是没有任何作业由cron运行。任何帮助,将不胜感激。我是否需要在crontab文件中添加其他内容?
48 * * * * sudo gzip -k /calcservergc.log。*
49 * * * *用于/calcservergc.log.*.gz中的文件; do sudo mv $ file $(hostname)。$ {file:1};完成
50 * * * * sudo rm $(主机名)。 .log。 .gz
答案 0 :(得分:1)
sudo命令可能无法在crontab中运行。通常,您需要一个密码来运行sudo,但是在cron作业中运行时可能有一种方法可以让它在没有密码的情况下运行。但是不建议这样做。
您需要以有权访问您需要完成的操作的用户身份运行cron。 Cron运行一个特定路径的简短列表。默认情况下,列表非常短。在linux框中,我使用的路径为/sbin:/usr/sbin:/bin:/usr/bin
。
此外,路径需要更具体。 Cron不以普通用户身份运行,因此您必须更具体地使用这些命令的路径和输出。
例如,在第一个命令中,gzip文件放在哪里?
看起来您正在尝试压缩日志文件,然后移动日志文件,然后删除旧的日志文件 - 这正是logrotate完成的。值得安装。 Logrotate解决了运行此命令时打开日志文件等问题 - 通常,打开日志文件的进程即使重命名也不会丢失文件句柄,因此即使在移动日志后也会继续写入日志。它还处理了保存最近日志文件存档的问题,例如syslog.1.gz,syslog.2.gz,syslog.x.gz或者尽可能多的存档空间或者想要为后代保留。
答案 1 :(得分:0)
我没有50点声誉,所以无法对你的问题发表评论,所以我会试着一次性说出来。
我发现你的3个命令可能存在问题,每个命令都在一分钟时启动。让我们说第一次操作需要超过一分钟才能运行(不应该发生,但理论上可能会发生),你的第二次调用无法工作或最差,它可以处理一半的数据) 。你不想在你的命令之间延迟5分钟,这就是时间的浪费。
您可以做的是创建一个shell脚本,您可以在其中放置3个命令。这样就可以防止你的操作“崩溃”。所以只需将3个命令放在脚本shell中,它们就会一个接一个地执行。
然后将文件放在像/ bin这样的地方(你也可以用ln -s创建一个符号链接)并用cron调用你的脚本。 (注意脚本shell中的路径)
现在,对于sudo问题 ...即使你把它放在一个shell脚本中,你仍然需要传递你的sudo密码,而cron在后台运行,所以你赢了# 39;能够输入您的密码。
您可以尝试两种解决方案。更改存储文件的包含文件夹的权限(通过在文件夹上使用chmod -r 777或chmod 755)或将文件移动/复制到您有读写权限的目录中。