我是新手..。我先把它拿出来。我有一个简单的Ubuntu20.04LTS服务器,它只用作我的服务器。
crontab给了我一些问题
*/10 * * * * screen -S minecraft -p 0 -X stuff "save-all^M"
@reboot /home/minecraft/startserver.sh
@daily find /home/minecraft/backup/* -mtime +6 -type f -delete
@daily zip -9 -r --exclude=*backup* --exclude=*web* --exclude=*crash-reports* --exclude=*lost+found* /home/minecraft/backup/$(date +"%Y.%m.%d %I.%M %P").zip /home/minecraft第一行可以工作,但是@ do和@reboot根本不起作用。所有的命令都是从终端发出的,没有错误。
请帮助我理解这一点,我对linux没有经验,我正在努力解决这个问题。我知道有些人可能认为用systemd来处理这个问题会更好,但是我还不知道这一点,我不想安装一个我无法修复的脚本。
为什么crontab失败了这些行?我不认为这是许可。请帮我调试一下
耽误您时间,实在对不起
编辑:好的,在深入研究之后,startserver脚本的问题在脚本本身而不是crontab中。我发现我需要在crontab中为screen命令设置-d标志。
zip命令正在工作,但我不知道使用斜杠\或使用" "在date D3中添加空格的转义代码不起作用。如果有人知道如何通过创建zip文件来逃离空间,请告诉我。
我在评论中被告知使用适当的格式编辑这篇文章。我不知道那是什么意思,这是我的第一篇帖子。
发布于 2021-08-15 13:04:50
通过cron运行的作业,或者systemd启动脚本不运行在桌面上相同的运行时环境中。systemd启动脚本以root的形式运行。您的PATH更改或其他环境变量设置都不会自动传播到cron作业。例如,没有$DISPLAY,所以GUI程序需要特殊处理(读man xhost)。
可以为cron文件中的所有crontab作业设置环境变量,读取man 5 crontab。
查看echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias在每个环境中的结果。
由于crontab行的D13部分默认由/bin/sh解释,它的语法比/bin/bash更简单,因此我建议让command调用bash脚本(可执行、挂载,从#!/bin/bash开始),后者设置环境,然后调用所需的程序。
https://askubuntu.com/questions/1358082
复制相似问题