Ubuntu Server cron作业不起作用

爆米花9499

当由cron运行时,本应仅在服务器打开时运行的脚本无法正常工作。如果我手动运行它,它将起作用。

backup() {
  if pidof java &> /dev/null; then

     screen -p 0 -S minecraft -X eval "stuff \"say server backing up\"\015"
     # We need to first put the server in readonly mode to reduce the chance of backing up half of a chunk.
     screen -p 0 -S minecraft -X eval "stuff \"save-off\"\015"
     screen -p 0 -S minecraft -X eval "stuff \"save-all\"\015"

     sleep 10


     cd ~/Minecraft
     mkdir backup
     tar cvfpz backup/Y-$(date +%Y_M-%m_D-%d_T-%H_%M)-world.backup.tar.gz world/

     screen -p 0 -S minecraft -X eval "stuff \"save-on\"\015"
     screen -p 0 -S minecraft -X eval "stuff \"say server done backing up\"\015"

     # Delete old backups
     echo deleting old backups
     find . -name '*-world.backup*' -mtime +5 -delete

   else
      echo Minecraft Server not on
   fi
 }

我想知道是否有人知道服务器停止后为什么不停止备份?

Mausy5043

启动该脚本的crontab文件应该是什么样的?脚本的权限/所有者是什么?

此链接上,我发现:

  1. 从用户crontab运行cron作业时,将以该用户身份执行该作业。但是,它不会在用户主目录中提供任何文件,例如.cshrc或.bashrc或任何其他文件。如果您需要cron来获取(读取)脚本所需的任何文件,则应从cron调用的脚本中执行。设置路径,源文件,设置环境变量等。
  2. 如果用户帐户在/ etc / passwd中具有crontab但没有可用的shell,则cronjob将不会运行。您必须为该帐户提供一个外壳,以使crontab运行。
  3. 如果您的cronjobs没有运行,请检查cron守护进程是否正在运行。然后记得检查/etc/cron.allow和/etc/cron.deny文件。如果存在,则您希望能够运行作业的用户必须位于/etc/cron.allow中。您可能还想检查/etc/security/access.conf文件是否存在。您可能需要在其中添加用户。
  4. Crontab不会解析为环境替代。您不能使用$ PATH,$ HOME或〜/ sbin之类的东西。您可以设置诸如MAILTO =或PATH =之类的东西,以及/ bin / sh shell使用的其他环境变量。

因此,我将从编辑cronjob本身并将〜更改为/ home / popcorn9499开始。然后对脚本执行相同的操作。同样在脚本中添加#! /bin/bash为第一行。

如果脚本中的所有内容只是该函数,backup() {则将该行和最后一行删除,}并使其成为普通的bash脚本。然后,您可以松开该backup参数,然后cronjob变为:(*/30 * * * * /home/popcorn9499/Scripts/minecraft.sh您真的需要每30分钟进行一次备份吗?)

接下来,确保您对脚本文件具有rwx权限: chmod u+rwx ~/Scripts/minecraft.sh

最后,考虑重新命名的目录~/Scripts,以~/bin作为已经在你的$ PATH。

那应该解决问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章