Lucidi0us

  • Content count

    8
  • Joined

  • Last visited

Community Reputation

1 Neutral

About Lucidi0us

  • Rank
    Junior Member
  1. Owner Read Write Group Read Only Everyone Read Only Is the service running the command being run under the owner user? otherwise, maybe a 775 permission is needed and then add the user to the group that the file is assigned to.
  2. It seems to happen on my server when the latency is quite low. I just assume the way it is coded it cannot display a fraction of a millisecond ping time. This could just be my perception, but I have never seen ??? on my server except when the ping is very low. For example, I see ??? right now and if I manually ping my server I see Pinging 10.0.0.11 with 32 bytes of data: Reply from 10.0.0.11: bytes=32 time<1ms TTL=64 Reply from 10.0.0.11: bytes=32 time<1ms TTL=64 Reply from 10.0.0.11: bytes=32 time<1ms TTL=64 Reply from 10.0.0.11: bytes=32 time<1ms TTL=64 Ping statistics for 10.0.0.11: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms So, to solve this.. find a way to restrict the bandwidth.. but really, having a very low ping is desired.
  3. my update script: /usr/local/bin/dontstarve_update #!/bin/bash # Stop DST servers /bin/systemctl stop dontstarve.service; # Copy current dedicated_server_mods_setup.lua to backup /bin/cat /home/steam/dontstarve/mods/dedicated_server_mods_setup.lua > /home/steam/backup_dedicated_server_mods_setup.lua; # Update DST /home/steam/steamcmd +force_install_dir "$install_dir" +login anonymous +app_update 343050 validate +quit; # Restore dedicated_server_mods_setup.lua from backup /bin/cat /home/steam/backup_dedicated_server_mods_setup.lua > /home/steam/dontstarve/mods/dedicated_server_mods_setup.lua; # Start DST servers /bin/systemctl start dontstarve.service; # Leave happy exit 0; crontab entry 0 3 * * 1 /usr/local/bin/dontstarve_update > /dev/null 2>&1 –
  4. If it helps, here is a my config for 6 worlds with different seasons on 4 of them
  5. I solved this by creating a script for updating the app that includes something like this: #!/bin/bash # Stop DST servers /bin/systemctl stop dontstarve.service; # Copy current dedicated_server_mods_setup.lua to backup /bin/cat /home/steam/dontstarve/mods/dedicated_server_mods_setup.lua > /home/steam/backup_dedicated_server_mods_setup.lua; # Update DST /home/steam/steamcmd +force_install_dir "$install_dir" +login anonymous +app_update 343050 validate +quit; # Restore dedicated_server_mods_setup.lua from backup /bin/cat /home/steam/backup_dedicated_server_mods_setup.lua > /home/steam/dontstarve/mods/dedicated_server_mods_setup.lua; # Start DST servers /bin/systemctl start dontstarve.service; # Leave happy exit 0; You can then run it in a chron job You can find the systemd and start scripts here: Here is the crontab entry to run updates at 3 am every Monday 0 3 * * 1 /usr/local/bin/dontstarve_update > /dev/null 2>&1 – make sure to chmod +x the script to allow execution chmod +x /usr/local/bin/dontstarve_update
  6. I wanted to share this since it took me a lot of effort to get it all working. This is my configuration for an Ubuntu server, running as a service. It has 1 master with 5 shards. 4 of the shards are stuck on each a different season with the 5th shard being caves used to interconnect them all. I followed the normal Linux dedicated server guides already available to get the basic "with caves" server going. Here is what I worked out from there: Note: I didn't keep track of where some of the original components came from because I wasn't intending to share when I began. (systemd script and sh script I modified, various forums I had to dredge to find all the small details, etc). I did heavily comment in many of these files to help anyone trying to poke around. So far, this setup has been working pretty well for me. Portals Master (overworld) 2-way portals = 6x to Caves 1-way portals = 1x to Autumn, 1x to Spring, 1x to Summer, 1x to Winter Caves (caves *srug*) 2-way portals = 6x to Master, 1x to Autumn, 1x to Spring, 1x to Summer, 1x to Winter Spring (overworld) 2-way portals = 1x to Caves, 2x to Winter, 2x to Summer 1-way portals = 1x to Caves, 1x to Autumn, 1x to Summer, 1x to Winter Summer (overworld) 2-way portals = 1x to Caves, 2x to Spring, 2x to Autumn 1-way portals = 1x to Caves, 1x to Spring, 1x to Autumn, 1x to Winter Autumn (overworld) 2-way portals = 1x to Caves, 2x to Winter, 2x to Summer 1-way portals = 1x to Caves, 1x to Spring, 1x to Summer, 1x to Winter Winter (overworld) 2-way portals = 1x to Caves, 2x to Autumn, 2x to Spring 1-way portals = 1x to Caves, 1x to Spring, 1x to Summer, 1x to Autumn dedicated_server_mods_setup.lua --Desynchronize Shards ServerModSetup("1396615817") -- Shard Configuration Mod ServerModSetup("595764362") I modified this Systemd script I found somewhere ## /etc/systemd/system/dontstarve.service [Unit] Description=Don't Starve Together Dedicated Server Wants=network-online.target After=network.target network-online.target [Service] ExecStart=/home/steam/run_dontstarve_dedicated.sh Restart=on-failure User=dontstarve [Install] WantedBy=multi-user.target # Security and Sandboxing NoNewPrivileges=yes PrivateTmp=yes PrivateDevices=yes ProtectKernelTunables=yes ProtectKernelModules=yes ProtectControlGroups=yes ProtectSystem=strict ProtectHome=read-only SystemCallFilter=~@mount ReadWritePaths=$HOME/dontstarve ReadWritePaths=$HOME/Steam ReadWritePaths=$HOME/.steam ReadWritePaths=$HOME ReadWritePaths=$HOME/.klei I modified this 'run_dont_starve_dedicated.sh' file I found somewhere #!/bin/bash steamcmd_dir="$HOME" # Location of steamcmd binary install_dir="$HOME/dontstarve" # Where you installed dst using force_install_dir in steamcmd cluster_name="MyClusterName" # The name of your cluster's folder in DoNotStarveTogether dir dontstarve_dir="$HOME/.klei/DoNotStarveTogether" # Path to Klie/DoNotStarveTogether directory containing cluster data # Fail on errors function fail() { echo Error: "$@" >&2 exit 1 } # Used to check if important things exists. function check_for_file() { if [ ! -e "$1" ]; then fail "Missing file: $1" fi } # For each shard, add: check_for_file "/path/to/shard's/server.ini" check_for_file "$HOME/steamcmd" check_for_file "$dontstarve_dir/$cluster_name/cluster.ini" check_for_file "$dontstarve_dir/$cluster_name/cluster_token.txt" check_for_file "$dontstarve_dir/$cluster_name/Master/server.ini" check_for_file "$dontstarve_dir/$cluster_name/Caves/server.ini" check_for_file "$dontstarve_dir/$cluster_name/Spring/server.ini" check_for_file "$dontstarve_dir/$cluster_name/Summer/server.ini" check_for_file "$dontstarve_dir/$cluster_name/Autumn/server.ini" check_for_file "$dontstarve_dir/$cluster_name/Winter/server.ini" check_for_file "$install_dir/bin" # Launch steam and check for updates #$HOME/steamcmd +force_install_dir "$install_dir" +login anonymous +app_update 343050 validate +quit # Setup command to start master / shards run_shared=($install_dir/bin/dontstarve_dedicated_server_nullrenderer) run_shared+=(-cluster "$cluster_name") run_shared+=(-monitor_parent_process $$) # Change working directory to prevent errors finding things cd ${install_dir}/bin # Start shards using run_shared for each shard "${run_shared[@]}" -shard Caves | sed 's/^/Caves: /' & "${run_shared[@]}" -shard Spring | sed 's/^/Spring: /' & "${run_shared[@]}" -shard Summer | sed 's/^/Summer: /' & "${run_shared[@]}" -shard Autumn | sed 's/^/Autumn: /' & "${run_shared[@]}" -shard Winter | sed 's/^/Winter: /' & # Sleep seems to help with errors if the master waits for the shards to get # rolling when there are several shards sleep 30 # Start Master "${run_shared[@]}" -shard Master | sed 's/^/Master: /' Caves/server.ini [NETWORK] server_port = 11001 [SHARD] is_master = false name = Caves id = 2 [STEAM] master_server_port = 27002 authentication_port = 8762 [ACCOUNT] encode_user_path = true Master/server.ini [NETWORK] server_port = 11000 [SHARD] is_master = true id = 1 [STEAM] master_server_port = 27001 authentication_port = 8761 [ACCOUNT] encode_user_path = true Autumn/server.ini [NETWORK] server_port = 11012 [SHARD] is_master = false name = Autumn id = 12 [STEAM] master_server_port = 27012 authentication_port = 8772 [ACCOUNT] encode_user_path = true Spring/server.ini [NETWORK] server_port = 11010 [SHARD] is_master = false name = Spring id = 10 [STEAM] master_server_port = 27010 authentication_port = 8770 [ACCOUNT] encode_user_path = true Summer/server.ini [NETWORK] server_port = 11011 [SHARD] is_master = false name = Summer id = 11 [STEAM] master_server_port = 27011 authentication_port = 8771 [ACCOUNT] encode_user_path = true Winter/server.ini [NETWORK] server_port = 11013 [SHARD] is_master = false name = Winter id = 13 [STEAM] master_server_port = 27013 authentication_port = 8773 [ACCOUNT] encode_user_path = true cluster.ini [GAMEPLAY] game_mode = endless max_players = 16 pvp = false pause_when_empty = true [NETWORK] cluster_description = Description Text cluster_name = Cluster Name is Server Name in Browser cluster_intention = social cluster_password = autosaver_enabled = true [MISC] console_enabled = true vote_enabled = false [SHARD] shard_enabled = true bind_ip = 127.0.0.1 master_ip = 127.0.0.1 master_port = 10889 cluster_key = SomethingUnique modoverrides.lua for shards only return { -- Shard Configuration Mod ["workshop-595764362"] = { enabled = true }, -- Desynchronize shards ["workshop-1396615817"] = { enabled = true } } modoverrides.lua for master only return { -- Desynchronize shards ["workshop-1396615817"] = { enabled = true }, -- Shard Configuration Mod portal setup ["workshop-595764362"] = { enabled = true, configuration_options = { -- 1 = master | 2 = caves | 10 = spring | 11 = summer | 12 = autumn | 13 = winter ["Connections"] = { ["1"] = { "2", "2", "2", "2", "2", "2" }, ["2"] = { "1", "1", "1", "1", "1", "1", "10", "11", "12", "13" }, ["10"] = { "2", "13", "13", "11", "11" }, ["11"] = { "2", "10", "10", "12", "12" }, ["12"] = { "2", "11", "11", "13", "13" }, ["13"] = { "2", "12", "12", "10", "10" } }, ["OneWayConnections"] = { ["1"] = { "10", "11", "12", "13" }, ["10"] = { "2", "11", "12", "13" }, ["11"] = { "10", "2", "12", "13" }, ["12"] = { "10", "11", "2", "13" }, ["13"] = { "10", "11", "12", "2" } } } } } caves worldgenoverride.lua return { override_enabled = true, preset = "DST_CAVE", -- "SURVIVAL_TOGETHER", "MOD_MISSING", "SURVIVAL_TOGETHER_CLASSIC", "SURVIVAL_DEFAULT_PLUS", "COMPLETE_DARKNESS", "DST_CAVE", "DST_CAVE_PLUS" overrides = { -- MISC task_set = "cave_default", -- "classic", "default", "cave_default" start_location = "caves", -- "caves", "default", "plus", "darkness" world_size = "huge", -- "small", "medium", "default", "huge" }, } Winter shard worldgenoverride.lua return { override_enabled = true, preset = "SURVIVAL_TOGETHER", -- "SURVIVAL_TOGETHER", "MOD_MISSING", "SURVIVAL_TOGETHER_CLASSIC", "SURVIVAL_DEFAULT_PLUS", "COMPLETE_DARKNESS", "DST_CAVE", "DST_CAVE_PLUS" overrides = { autumn = "noseason", -- "noseason", "veryshortseason", "shortseason", "default", "longseason", "verylongseason", "random" winter = "verylongseason", -- "noseason", "veryshortseason", "shortseason", "default", "longseason", "verylongseason", "random" spring = "noseason", -- "noseason", "veryshortseason", "shortseason", "default", "longseason", "verylongseason", "random" summer = "noseason", -- "noseason", "veryshortseason", "shortseason", "default", "longseason", "verylongseason", "random" season_start = "winter", -- "default", "winter", "spring", "summer", "autumnorspring", "winterorsummer", "random" }, } Spring shard worldgenoverride.lua return { override_enabled = true, preset = "SURVIVAL_TOGETHER", -- "SURVIVAL_TOGETHER", "MOD_MISSING", "SURVIVAL_TOGETHER_CLASSIC", "SURVIVAL_DEFAULT_PLUS", "COMPLETE_DARKNESS", "DST_CAVE", "DST_CAVE_PLUS" overrides = { autumn = "noseason", -- "noseason", "veryshortseason", "shortseason", "default", "longseason", "verylongseason", "random" winter = "noseason", -- "noseason", "veryshortseason", "shortseason", "default", "longseason", "verylongseason", "random" spring = "verylongseason", -- "noseason", "veryshortseason", "shortseason", "default", "longseason", "verylongseason", "random" summer = "noseason", -- "noseason", "veryshortseason", "shortseason", "default", "longseason", "verylongseason", "random" season_start = "spring", -- "default", "winter", "spring", "summer", "autumnorspring", "winterorsummer", "random" }, } Summer shard worldgenoverride.lua return { override_enabled = true, preset = "SURVIVAL_TOGETHER", -- "SURVIVAL_TOGETHER", "MOD_MISSING", "SURVIVAL_TOGETHER_CLASSIC", "SURVIVAL_DEFAULT_PLUS", "COMPLETE_DARKNESS", "DST_CAVE", "DST_CAVE_PLUS" overrides = { autumn = "noseason", -- "noseason", "veryshortseason", "shortseason", "default", "longseason", "verylongseason", "random" winter = "noseason", -- "noseason", "veryshortseason", "shortseason", "default", "longseason", "verylongseason", "random" spring = "noseason", -- "noseason", "veryshortseason", "shortseason", "default", "longseason", "verylongseason", "random" summer = "verylongseason", -- "noseason", "veryshortseason", "shortseason", "default", "longseason", "verylongseason", "random" season_start = "summer", -- "default", "winter", "spring", "summer", "autumnorspring", "winterorsummer", "random" }, } Autumn shard worldgenoverride.lua return { override_enabled = true, preset = "SURVIVAL_TOGETHER", -- "SURVIVAL_TOGETHER", "MOD_MISSING", "SURVIVAL_TOGETHER_CLASSIC", "SURVIVAL_DEFAULT_PLUS", "COMPLETE_DARKNESS", "DST_CAVE", "DST_CAVE_PLUS" overrides = { autumn = "verylongseason", -- "noseason", "veryshortseason", "shortseason", "default", "longseason", "verylongseason", "random" winter = "noseason", -- "noseason", "veryshortseason", "shortseason", "default", "longseason", "verylongseason", "random" spring = "noseason", -- "noseason", "veryshortseason", "shortseason", "default", "longseason", "verylongseason", "random" summer = "noseason", -- "noseason", "veryshortseason", "shortseason", "default", "longseason", "verylongseason", "random" season_start = "autumn", -- "default", "winter", "spring", "summer", "autumnorspring", "winterorsummer", "random" }, } Additional tips Monitor logs from all shards in cluster with this command from the cluster folder watch "tail ./*/server_log.txt" When implementing desynchronize shards mod, you may need to enter console commands manually or delete your saves and reload your server to get it working. I left a discussion item mentioning this on the steam workshop page for the mod since the author didn't explain in any verbosity.
  7. Shard configuration mod

    I know this is an old post, but I was just going down this road. The tool that generates the config requires .NET. The mod itself doesn't, so you have to hand-craft your file. You only need to configure it on the master, but enable on each shard. Here is my master modoverrides.lua entry: -- Shard Configuration Mod ["workshop-595764362"] = { enabled = true, configuration_options = { -- 1 = master | 2 = caves | 10 = spring | 11 = summer | 12 = autumn | 13 = winter ["Connections"] = { ["1"] = { "2", "2", "2", "2", "2", "2", "2", "2", "2", "2" }, ["2"] = { "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "10", "10", "10", "10", $ ["10"] = { "2","2", "2", "2", "11", "11", "11", "11", "11", "11" }, ["11"] = { "2","2", "2", "2", "12", "12", "12", "12", "12", "12" }, ["12"] = { "2","2", "2", "2", "13", "13", "13", "13", "13", "13" }, ["13"] = { "2","2", "2", "2", "10", "10", "10", "10", "10", "10" } }, ["OneWayConnections"] = { ["1"] = { "2", "10", "11", "12", "13" }, ["10"] = { "1", "10", "11", "12", "13" }, ["11"] = { "1", "10", "11", "12", "13" }, ["12"] = { "1", "10", "11", "12", "13" }, ["13"] = { "1", "10", "11", "12", "13" } } } }