Spigot eBackup - Simple and reliable backups for your server! Supports FTP/SFTP! 1.2.0

The easiest and simplest way to backup your server reliably! Free, and supports FTP+SFTP!

    • Like Like x 1
  1. PawPawDude

    Supporter

    Good timing, @EspiDev w/ eBackup. You may or may not know that another (unnamed) plugin -- an old standard plugin for server backups -- recently was re-released overhauling everything about it. The troubling part is it switched to using regex for configuration of things -- so has left many/most of its users in the regex dust, so to speak, errors and tech support on the rise. You, wisely, are using simple, easy to comprehend paths, not regex. What good timing. Thanks. (y) Also, glad to see ProtectionStones evolving. Nice.
     
  2. Glad to see you enjoy this plugin, I originally made it for my server since some other plugins either cost money or have terrible performance.

    My effort is still going to ProtectionStones though, this plugin will probably only get bug fix updates in the future.
     
    • Like Like x 1
  3. Hey there! This plugin has been working amazingly uploading to my SFTP server up until a recent build of Paper (which is forked from Spigot but should be mostly the same, but I understand if you're not supporting Paper and this bug may now be appearing in Spigot too) It works on Build #167 and below, but anything after and I get this error

    [14:34:16 INFO]: [eBackup] Starting backup...
    [14:34:16 WARN]: java.lang.IllegalStateException: Asynchronous world save!
    [14:34:16 WARN]: at org.spigotmc.AsyncCatcher.catchOp(AsyncCatcher.java:15)
    [14:34:16 WARN]: at org.bukkit.craftbukkit.v1_14_R1.CraftWorld.save(CraftWorld.java:1299)
    [14:34:16 WARN]: at dev.espi.ebackup.BackupUtil.doBackup(BackupUtil.java:93)
    [14:34:16 WARN]: at dev.espi.ebackup.eBackup.lambda$onCommand$1(eBackup.java:122)
    [14:34:16 WARN]: at org.bukkit.craftbukkit.v1_14_R1.scheduler.CraftTask.run(CraftTask.java:84)
    [14:34:16 WARN]: at org.bukkit.craftbukkit.v1_14_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:54)
    [14:34:16 WARN]: at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22)
    [14:34:16 WARN]: at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    [14:34:16 WARN]: at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    [14:34:16 WARN]: at java.base/java.lang.Thread.run(Thread.java:834)
    [14:34:16 INFO]: [eBackup] Backup complete!
    [14:34:16 INFO]: Finished!

    in which the server only backs up a 4kilobyte file instead of the whole thing. Recent changes in Paper seem to bring up chunks and async loading (https://papermc.io/ci/job/Paper-1.14/changes) but I don't really know what's going on. Hopefully it isn't something too serious. I'm able to stay on build #167 to backup for now. Thanks again for this amazing plugin :)
     
    • Winner Winner x 1
  4. Thank you for reporting this bug!

    I have fixed this issue, let me know if you have any more problems.
     
    • Winner Winner x 1
  5. That fixed everything. Thank you again :) You released 1.0 a day or two before I was looking for this exact thing because I don't have any way to backup the files from my server to my home computer. This did everything and more. The ability to blacklist directories for Dynmap and CoreProtect brings the backup from 7gb to 2gb which is extremely helpful for my limited bandwidth.

    Once I'm able to leave ratings (I don't see a button for it?) I'll definitely put one down :)
     
  6. This is still working as intended, I just had a couple feature requests if you don't mind?

    I'm using Multiverse-Core and have two extra worlds loaded. However, I don't want to include those extra worlds in the eBackup, so in the ignore section I put the folder of both worlds (folders) that I didn't want to include, however, eBackup still backed up the worlds while the Multiverse plugin was enabled. In the command it even said "backup up thirdWorld." If I disable the Multiverse.jar before using eBackup it will not say "backing up thirdWorld", but it will still backup the world folders anyway.

    The other request should be a bit more simple. Basically I have it setup to use SFTP, but sometimes when I manually trigger /ebackup backup I just want it to make a local copy and not upload to the SFTP server. Maybe something like /ebackup local?

    Let me know if I didn't make much sense on the first one, it's kind of weird to explain. Thanks again for the plugin!! You rock!
     
  7. Hmmm, the issue with the worlds being backed up is strange, since it works perfectly for me. Maybe send me your config file? Just double check if the world folder you specified is spelled correctly.

    As for your other request, I've implemented it in the latest version.
     
  8. The localbackup works great! Thank you!

    Multiverse is enabled but the folders are in the config file and it still backs up.

    [​IMG]

    [​IMG]

    With Multiverse disabled it won't show the "Backing up world ircnodecraft" part in the console, but it still will. Only when I remove both folders from the root directory do they not backup. The ebackups, dynmap, logs, and cache folders are successfully ignored.
     
  9. Okay, I'm pretty confused about this, so I made a debug build which will output more messages, please send me the output: https://drive.google.com/open?id=14SwbH2-ijnnVpp_CbhG5j5Ccbv0qZQ3u
     
  10. Ahhh I feel pretty dumb. I was doing my own debugging, even messing with folder permissions, and it turns out it was a problem with whitespace in the config.yml file.

    My Minecraft server is in a remote location so I was using nano in a terminal to edit the config.yml file and used Tabs in the ignore section instead of spacebar. When I opened the config file in Atom I noticed sure enough I had some whitespace errors, and now the worlds I blacklisted are included in the debug list of ignored folders.

    Another victim of Tabs vs Spaces :)

    [​IMG]

    Once again, thank you so much for this plugin. I've seen others bring up over-intricate backup solutions and I'm like, naa, this does exactly what I was looking for. <3
     
    • Like Like x 1
  11. Hello! I am liking this plugin so far as it was easy to set up and configure and is lightweight. However it seems to have a problem saving data as it kept saving the backup non-stop until I ran out of space on my server.

    Here is what was shown in the log:
    Code (Java):
    [07:00:00] [Craft Scheduler Thread - 2/INFO]: [eBackup] Starting backup...
    [07:00:00] [Server thread/WARN]: A manual (plugin-induced) save has been detected while server is configured to auto-save. This may affect performance.
    [07:00:01] [Craft Scheduler Thread - 2/INFO]: [eBackup] Backing up world PWK...
    [07:00:18] [Craft Scheduler Thread - 2/INFO]: [eBackup] Backing up world PWK_nether...
    [07:00:19] [Craft Scheduler Thread - 2/INFO]: [eBackup] Backing up world PWK_the_end...
    [07:00:19] [Craft Scheduler Thread - 2/INFO]: [eBackup] Backing up other files...
    [08:39:59] [User Authenticator #13/INFO]: UUID of player ...
    <unrelated parts of log truncated>
    [17:16:48] [Craft Scheduler Thread - 2/WARN]: java.io.IOException: No space left on device
    [17:16:48] [Craft Scheduler Thread - 2/WARN]:     at java.io.FileOutputStream.writeBytes(Native Method)
    [17:16:48] [Craft Scheduler Thread - 2/WARN]:     at java.io.FileOutputStream.write(Unknown Source)
    [17:16:48] [Craft Scheduler Thread - 2/WARN]:     at java.util.zip.DeflaterOutputStream.deflate(Unknown Source)
    [17:16:48] [Craft Scheduler Thread - 2/WARN]:     at java.util.zip.DeflaterOutputStream.write(Unknown Source)
    [17:16:48] [Craft Scheduler Thread - 2/WARN]:     at java.util.zip.ZipOutputStream.write(Unknown Source)
    [17:16:48] [Craft Scheduler Thread - 2/WARN]:     at dev.espi.ebackup.BackupUtil.zipFile(BackupUtil.java:201)
    [17:16:48] [Craft Scheduler Thread - 2/WARN]:     at dev.espi.ebackup.BackupUtil.zipFile(BackupUtil.java:191)
    [17:16:48] [Craft Scheduler Thread - 2/WARN]:     at dev.espi.ebackup.BackupUtil.zipFile(BackupUtil.java:191)
    [17:16:48] [Craft Scheduler Thread - 2/WARN]:     at dev.espi.ebackup.BackupUtil.doBackup(BackupUtil.java:114)
    [17:16:48] [Craft Scheduler Thread - 2/WARN]:     at dev.espi.ebackup.eBackup.lambda$onEnable$0(eBackup.java:93)
    [17:16:48] [Craft Scheduler Thread - 2/WARN]:     at org.bukkit.craftbukkit.v1_14_R1.scheduler.CraftTask.run(CraftTask.java:81)
    [17:16:48] [Craft Scheduler Thread - 2/WARN]:     at org.bukkit.craftbukkit.v1_14_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:54)
    [17:16:48] [Craft Scheduler Thread - 2/WARN]:     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    [17:16:48] [Craft Scheduler Thread - 2/WARN]:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    [17:16:48] [Craft Scheduler Thread - 2/WARN]:     at java.lang.Thread.run(Unknown Source)
    [17:16:48] [Craft Scheduler Thread - 2/INFO]: [eBackup] Backup complete!
     
    And here is the file size of the backup I ended up with:
    pwk_no_space_exception.png

    The backup's file size is significantly larger than the server's files themselves which only total to less than 500MB and the whole backup process took over 12 hours to 'complete'.
    I ran the ebackup stats command in the console and it reported that my server had 0GB of space remaining. Something definitely went wrong here and I hope there is a way this can be resolved.
     
  12. Hmm, it must be in an infinite loop... Do you have in shortcuts or symlinks in your server folder?
     
  13. Could you also send me your config?
     
  14. No, nothing of the sort.

    Here is my config file, maybe you can spot something I did wrongly.
    Code (YAML):
    crontask: '0 0 7 * * 1' # This would make it every day at 4 AM

    # CronTask format:
    # * * * * * *
    # | | | | | |
    # | | | | | +---- Day of the Week   (1-7)
    # | | | | +------ Month             (1-12)
    # | | | +-------- Day of the Month  (1-31)
    # | | +---------- Hour              (0-23)
    # | +------------ Minute            (0-59)
    # +-------------- Second            (0-59)

    # A few more examples...
    # crontask: '0 0 * * * *' This would make it every hour
    # crontask: '0 0 4 * * 7' This would make it every sunday at 4 AM
    # crontask: '0 0 4 1 * *' This would make it every first of the month at 4 AM

    backup-format
    : 'PWK eBackup {DATE}'

    # The folder where to store the backups locally.
    backup-path
    : 'eBackups'

    # The maximum backups stored. Will delete older backups when reached. (= 0 to disable)
    # Note: this will only work with local backups (fallbacks included).
    max-backups
    : 5

    # FTP/SFTP settings and configuration.
    # Backups saved here will not be auto-deleted.
    ftp
    :
        enable
    : true
        type
    : sftp # ftp for ftp, sftp for ftp over ssh
        host
    : '<redacted>'
        port
    : 22
        user
    : '<redacted>'
        pass
    : '<redacted>'
        path
    : '<redacted>'

    # What you want in the backup.
    # By default, everything will be backupped, you can remove folders in the ignore section
    backup
    :
        pluginjars
    : true # The .jar files for the plugins
        pluginconfs
    : true # The data folder of each plugin
        ignore
    : # Files to ignore and NOT backup
            - 'plugins/eBackup/backups'
            - 'plugins/dynmap'
            - 'world'
            - 'world_nether'
            - 'world_the_end'
            - 'logs'
            - 'cache'
    The 'world', 'world_nether' and 'world_the_end' folders I have ignored because that's no longer the current world my server is playing on and I have backed up separately, I just haven't gone ahead to delete it so I have them ignored instead. Besides that I think it should have been working fine.
     
  15. Okay you'll have to add 'eBackups' to the ignore section because it'll keep backing up itself, as well as other backups you have done.