Ubuntu(Oracle VM 虚拟盒)
我接到一个任务,要编写如下 3 个 crontab 作业:
- logger - 每 30 分钟将日期打印到 /var/log/myDate.log 中的作业
- 归档程序 - 每天凌晨 2:00 使用 gzip 压缩 /var/log/myDate.log 并附加时间戳 (/var/log/2022_08_03.log.gz)
- cleaner——清理最近的7个gzip文件之外的所有文件。
这是我目前得到的:
nevosmic@nevosmic-VirtualBox:~$ crontab -e
#
#
* /30 * * * * date >> /home/nevosmic/myDate.log
0 2 * * * gzip /home/nevosmic/myDate.log
一切正常。在 /home/nevosmic 中创建 myDate.log 文件,每 30 分钟打印一次日期。然后在 02:00 创建 myDate.log.gz
我遇到的第一个问题是 /var/log/ 目录没有权限写入其他用户(我可以从 root 内部创建 crontab 作业吗?)
更新:
我执行了 $ sudo crontab -e,它成功了。我成功创建并写入 /var/log/myDate.log。但现在,即使我尝试将压缩文件存储在另一个目录中:/home/my_userName/2022_08_03.log.gz,gzip 也不起作用。
我的命令:
#
#
*/30 * * * * date >> /var/log/myDate.log
0 2 * * * gzip /var/log/myDate.log > /home/my_userName/$(date+"%y_%m_%d").log.gz
它创建一个压缩文件 /var/log/myDate.log.gz ...但这不是我的本意。(我需要它在/home/我的用户名/)
关于如何完成任务 3 有什么建议吗?
我可以这样做吗?:
# Every monday at 02:00 rm all files except the 7 most recent
0 2 * * 1 ls -t /home/nevosmic/logim/*.gz | tail -n 7 | xargs rm
答案1
更新:
感谢steeldriver,
此命令对我有用(我需要在任何“%”之前加上“”):
#
*/30 * * * * date >> /var/log/myDate.log
0 2 * * * gzip -c /var/log/myDate.log > /home/my_userName/$(date +"\%y\%m\%d").log.gz