SteamCMD არის Steam-ის კლიენტი მაღაზიის, მეგობრების სიისა და გრაფიკის გარეშე. ის სერვერებზე ერთ საქმეს აკეთებს: ჩამოტვირთავს და განაახლებს უფასო dedicated-server აპლიკაციებს, რომლებსაც Valve და სხვა გამომცემლები Steam-ზე აქვეყნებენ, და მათთვის Workshop-ის კონტენტს იღებს. Steam-ის თამაშის თითქმის ყველა ინსტალაციის გზამკვლევი ერთსა და იმავე ოთხ არგუმენტს ერთსა და იმავე თანმიმდევრობით იწყებს, და როცა გაიგებ, რას აკეთებს თითოეული - და რისთვის არის manifest ფაილი, რომელსაც ის ტოვებს - შეგიძლია დააყენო, დააფიქსირო, გადართო branch-ი და დაასკრიპტო ნებისმიერი. ეს არის ეს ახსნა, პლუს შეცდომები, რომლებიც ჩავარდნების უმეტესობას განაპირობებს.
რა არის SteamCMD და როდის ეხები მას#
Steam-ის თამაშის dedicated სერვერი ჩვეულებრივ Steam-ზე ცალკე უფასო "აპლიკაციაა" საკუთარი app id-ით. ის თამაში არ არის. უმეტესის ჩამოსატვირთად თამაშის ფლობა არ გჭირდება და მაღაზიის გვერდიდან ვერ ჩამოტვირთავ, რადგან ისინი ხელსაწყოებია და არა პროდუქტები. SteamCMD არის გზა მათ მისაღებად.
გამოიყენებ ოთხ სიტუაციაში:
- პირველი ინსტალაცია. სერვერის აპლიკაციის ჩამოტვირთვა შენს მიერ არჩეულ საქაღალდეში.
- განახლებები. იგივე ბრძანება ხელახლა გაშვებული მხოლოდ იმას იღებს, რაც შეიცვალა, სწორედ ამიტომ ჩნდება ის ყველა restart-სკრიპტში, რომელსაც ხალხი წერს.
- Workshop-ის კონტენტი.
workshop_download_itemკონკრეტულ Workshop ნივთს id-ით ჩამოტვირთავს, რითაც Arma 3, DayZ და Squad-ის სერვერები თავიანთ mod-ებს იღებენ. - შეკეთება.
validate-ის დამატება ყველა ფაილს manifest-თან ამოწმებს და ყველაფერს, რაც არ ემთხვევა, ცვლის.
თუ სერვერებს პანელზე უშვებ, შეიძლება ამაში არაფერი აკრიფო. RE:NODE-ზე ინსტალაცია სერვერის შექმნისას სრულდება - ჩვეულებრივ გადახდის დადასტურებიდან ერთ წუთში - და მნიშვნელობები, რომლებსაც SteamCMD არგუმენტებად მიიღებდა, ამის ნაცვლად ველებად ჩნდება Startup tab-ზე. იმის გაგება, რას აკეთებს ეს ველები, ათ წუთს მაინც ღირს, რადგან იმ დღეს, როცა რამე გაფუჭდება, კონსოლი SteamCMD-ის გამოსავალს სიტყვასიტყვით გაჩვენებს, და კონსოლის წაკითხვა გაცილებით ადვილია, როცა იცი, ხაზები რას ნიშნავს.
მისი დაყენება#
SteamCMD პატარა bootstrapper-ია, რომელიც ყოველ გაშვებაზე თავს განაახლებს. ჩამოტვირთე, გახსენი, გაუშვი ერთხელ და დაელოდე დასრულებას, სანამ რამეს სთხოვ.
$ sudo useradd -m steam && sudo su - steam$ mkdir ~/steamcmd && cd ~/steamcmd$ curl -sL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar zxf -$ ./steamcmd.sh +quitWindows-ზე ეკვივალენტია steamcmd.zip იმავე path-იდან, გახსნილი სადმე და გაშვებული როგორც steamcmd.exe. macOS-ზე ეს არის steamcmd_osx.tar.gz, თუმცა macOS-იდან თითქმის არავინ ჰოსტავს.
Linux-ზე ორი რამ ეჭირება ხალხს. პირველი ისაა, რომ SteamCMD 32-ბიტიანი binary-ია, ამიტომ 64-ბიტიან სისტემას 32-ბიტიანი ბიბლიოთეკები სჭირდება, სანამ საერთოდ დაიწყებს:
# Debian and Ubuntu$ sudo dpkg --add-architecture i386 && sudo apt update$ sudo apt install lib32gcc-s1 # lib32gcc1 on older releases# RHEL, Rocky, AlmaLinux$ sudo dnf install glibc.i686 libstdc++.i686მეორე მფლობელობაა. გაუშვი SteamCMD ჩვეულებრივი მომხმარებლით, რომელიც ინსტალაციის დირექტორიას ფლობს და არა root-ით. Root-ის ინსტალაციები ტოვებენ ფაილებს, რომელთა ჩაწერაც service ანგარიშს არ შეუძლია, და განახლება, რომელიც ექვსი კვირის შემდეგ ვარდება, permission-ების შეცდომას აცხადებს, რომელიც დისკის პრობლემას ჰგავს.
ინსტალაციის ბრძანების ანატომია#
ეს არის ხაზი და Steam-ის თითოეული თამაშის გზამკვლევი მისი ვარიაციაა:
$ ./steamcmd.sh +force_install_dir /srv/valheim \ +login anonymous \ +app_update 896660 validate \ +quitთითოეული + ერთ ბრძანებას გაშვებისას ასრულებს, დაწერილი თანმიმდევრობით, და შემდეგ SteamCMD ინტერაქტიულ prompt-ში გადავიდოდა, +quit რომ არ იყოს.
| არგუმენტი | რას აკეთებს |
|---|---|
+force_install_dir <path> | სად მიდის სერვერის ფაილები. უნდა იყოს app_update-მდე |
+login anonymous | შესვლა ანგარიშის გარეშე. უნდა იყოს app_update-მდე |
+login <user> | შესვლა რეალური ანგარიშით; პაროლს ითხოვს |
+app_update <id> | აპლიკაციის ინსტალაცია ან განახლება |
validate | ყველა ფაილის manifest-თან შემოწმება და შეკეთება |
-beta <branch> | public-ის ნაცვლად დასახელებული branch-ის გამოყენება |
-betapassword <pw> | პაროლი private branch-ისთვის |
+quit | გასვლა prompt-ის გახსნის ნაცვლად |
+runscript <file> | ბრძანებების ფაილის გაშვება მათი აკრეფის ნაცვლად |
force_install_dir არის ის, რაც ხალხს ეჭირება. ფარდობითი path SteamCMD-ის საკუთარი დირექტორიის მიმართ წყდება და არა შენი shell-ის სამუშაო დირექტორიის, ამიტომ +force_install_dir ../valheim სხვადასხვა რამეს ნიშნავს იმის მიხედვით, სად არის SteamCMD. გამოიყენე აბსოლუტური path. საერთოდ გამოტოვე და ფაილები SteamCMD-ის საქაღალდის ქვეშ steamapps/common/<AppName>-ში ჩავარდება, რაც ერთი სერვერისთვის კარგია და სამისთვის - მოუხერხებელი.
როცა ჩამოტვირთვა დასრულდება, ნახე, რა დევს ინსტალაციის დირექტორიაში თამაშის გარდა:
/srv/valheim/ valheim_server.x86_64 steamapps/ appmanifest_896660.acf installed build id, depots, sizeappmanifest_<appid>.acf არის SteamCMD-ის ჩანაწერი იმაზე, რა ჰგონია, რომ დაყენებულია. ის უბრალო ტექსტური ფაილია და შეიცავს build id-ს, რაც ერთადერთი საიმედო გზაა კითხვაზე "რომელ ვერსიაზეა ეს სერვერი" პასუხის გასაცემად. წაშალე და შემდეგი app_update ყველაფერს თავიდან ჩამოტვირთავს, რაც ზოგჯერ ყველაზე სწრაფი გამოსწორებაა ინსტალაციისთვის, რომელიც ისეთ მდგომარეობაში ჩავარდა, რომელსაც validate ვერანაირად ვერ აგვარებს.
App id-ები და სამი სახეობა, რომელსაც შეხვდები#
App id რიცხვია და ერთ თამაშს რამდენიმე შეიძლება ჰქონდეს. არასწორის აღება ამ მთელ სფეროში ყველაზე გავრცელებული შეცდომაა, რადგან არასწორი რიცხვი ხშირად აშკარა შეცდომის ნაცვლად დამაჯერებლად გამოყურებად ჩავარდნას იძლევა.
- სერვერის app id არის ის, რასაც
app_update-ს გადასცემ. ის ჩვეულებრივ ცალკე "Dedicated Server" ხელსაწყოს ეკუთვნის. - თამაშის app id არის ის, რასაც
workshop_download_item-ს გადასცემ, რადგან Workshop-ის კონტენტი თამაშს ეკუთვნის და არა სერვერის ხელსაწყოს, და ის ასევე id-ია, რომელსაც Steam game server login token-ის შექმნისას იყენებ. - ზოგჯერ ისინი ერთი და იგივეა. Counter-Strike 2 ცნობილი შემთხვევაა: სერვერი app
730-იდან დგება, იგივე id-დან, რაც თამაშს აქვს.
| თამაში | სერვერის app id | თამაშის app id |
|---|---|---|
| Counter-Strike 2 | 730 | 730 |
| Team Fortress 2 | 232250 | 440 |
| Garry's Mod | 4020 | 4000 |
| Left 4 Dead 2 | 222860 | 550 |
| Valheim | 896660 | 892970 |
| Unturned | 1110390 | 304930 |
| Palworld | 2394010 | 1623730 |
| Project Zomboid | 380870 | 108600 |
| 7 Days to Die | 294420 | 251570 |
| DayZ | 223350 | 221100 |
| Arma 3 | 233780 | 107410 |
| Rust | 258550 | 252490 |
| Satisfactory | 1690800 | 526870 |
| ARK: Survival Ascended | 2430930 | 2399830 |
როცა id-ს ვერ პოულობ, ჩვეულებრივი წყარო SteamDB-ა და SteamCMD თავადაც გეტყვის:
Steam> app_info_update 1Steam> app_info_print 896660ეს ბეჭდავს აპლიკაციის მეტამონაცემებს, branch-ების სიას და თითოეულის მიმდინარე build id-ს. ის ვრცელია და ავტორიტეტული პასუხია, როცა wiki გვერდი რეალობას ეწინააღმდეგება.
Anonymous login და თამაშები, რომლებიც უარს ამბობენ#
login anonymous dedicated server ხელსაწყოების დიდი უმრავლესობისთვის მუშაობს. უმცირესობას Steam ანგარიში სჭირდება, რომელიც თამაშს ფლობს, და გვერდის ავლა არ არსებობს: Arma 3, DayZ და Project Zomboid ყველაზე ხშირად შეგხვდება, და ამ თამაშების Workshop-ის ჩამოტვირთვებსაც იგივე ანგარიში სჭირდება.
$ ./steamcmd.sh +force_install_dir /srv/dayz \ +login myspareaccount \ +app_update 223350 validate +quitამის არასწორად გაკეთების სიმპტომი კონკრეტული შეტყობინებაა:
ERROR! Failed to install app '223350' (No subscription)"No subscription" ნიშნავს, რომ შესული იდენტობა ამ აპლიკაციის ლიცენზიას არ ფლობს. ან anonymous გამოიყენე იმაზე, რომელიც მას არ იღებს, ან ანგარიში, რომლითაც შეხვედი, თამაშს არ ფლობს.
სამი რამ, რაც უნდა იცოდე, სანამ სერვერზე რეალურ credentials-ს აკრიფავ:
- გამოიყენე სათადარიგო ანგარიში. იყიდე თამაში ანგარიშზე, რომელზეც სხვა არაფერი გიდევს. Game-server ინსტალაციას ანგარიშთან საქმე არ აქვს, რომლითაც ყიდულობ.
- Steam Guard ერთხელ ინტერაქტიულად უნდა დაკმაყოფილდეს. მობილური authenticator-ით პირველად შესვლას ტელეფონზე ადასტურებ; შემდეგ SteamCMD credential-ს თავის config დირექტორიაში ინახავს და შემდგომი გაშვებები უყურადღებოა. ამიტომ უყურადღებო სკრიპტი ერთხელ მაინც უნდა იყოს ხელით გაშვებული.
- პაროლი ბრძანების ხაზზე არ გადასცე. ის shell-ის ისტორიაში ხვდება და პროცესების სიაში ჩანს. დაე SteamCMD თავად ჰკითხოს.
RE:NODE-ზე თამაშები, რომლებსაც შენი საკუთარი Steam შესვლა სჭირდებათ - მათ შორის Arma 3, DayZ, Project Zomboid და 7 Days to Die - იქმნება დაუყოვნებლივ და შემდეგ Setup tab-ზე ელოდება, სანამ credentials-ს არ მიაწვდი. ისინი ინახება ისე, როგორც აკრიფე, რაც პატიოსანი აღწერაა იმისა, რაც ნებისმიერმა ჰოსტმა უნდა გააკეთოს, რომ შენს მაგივრად SteamCMD გაუშვას, და მიზეზია, რის გამოც სათადარიგო ანგარიშის შესახებ ზემოთ მოცემული რჩევა არჩევითი არ არის.
განახლებები, validate და beta branch-ები#
განახლება იგივე ბრძანებაა ხელახლა. SteamCMD manifest-ს იმასთან ადარებს, რაც დაყენებულია, და მხოლოდ შეცვლილ ნაწილებს იღებს, ამიტომ 20 GB თამაშის რუტინული განახლება რამდენიმე ასეულ მეგაბაიტს გადაიტანს.
validate სხვაა. ის ინსტალაციის ყველა ფაილს ჰეშავს და ყველაფერს ცვლის, რაც manifest-ს არ ემთხვევა. ეს სწორი რეაქციაა სერვერზე, რომელიც შეწყვეტილი განახლების, ჩამოტვირთვისას გავსებული დისკის შემდეგ გაშვებისას ვარდება, ან თამაშზე, რომლის დეველოპერიც გეუბნება. დიდი ინსტალაციის ყოველ restart-ზე მისი გაშვება არ ღირს, რადგან ყოველ ჯერზე მთელ თამაშს დისკიდან კითხულობს.
Branch-ები არის გზა, რომლითაც გამომცემლები ექსპერიმენტულ build-ებს აქვეყნებენ. ნაგულისხმევ branch-ს public ჰქვია და დასახელებული branch განახლების ხაზზე ირჩევა:
# switch to a public test branch$ ./steamcmd.sh +force_install_dir /srv/7dtd +login anonymous \ +app_update 294420 -beta latest_experimental validate +quit# switch back$ ./steamcmd.sh +force_install_dir /srv/7dtd +login anonymous \ +app_update 294420 -beta public validate +quitზოგ branch-ს -betapassword სჭირდება, რომელსაც დეველოპერი branch-ის სახელთან ერთად აქვეყნებს. ორი წესი ყველაზე ვრცელდება. კლიენტები და სერვერები ერთსა და იმავე branch-ზე უნდა იყვნენ, და შეცდომა, როცა არ არიან, ჩვეულებრივ ვერსიის შეუსაბამობაა, რომელიც branch-ებს არ ახსენებს. და branch ვერსიის დაფიქსირების ერთადერთი მხარდაჭერილი გზაა - SteamCMD-ს არ აქვს "დააყენე build 12345" არგუმენტი, ამიტომ თუ თამაში ძველ branch-ს არ აქვეყნებს, მისით უკან ვერ დაბრუნდები. ეს განახლების დღემდე დაგეგმე და არა მის დროს, და წაიკითხე რა უნდა გააკეთო, როცა mod-ის განახლება ტეხავს, თუ სერვერი modded-ია.
სკრიპტული ინსტალაციები და უყურადღებო განახლებები#
ერთი და იგივე გრძელი ხაზის განმეორებით აკრეფა არის გზა, რომლითაც ბეჭდვის შეცდომები production-ში ხვდება. SteamCMD კითხულობს სკრიპტის ფაილს, სადაც ბრძანებებს + პრეფიქსი არ აქვთ:
@ShutdownOnFailedCommand 1@NoPromptForPassword 1force_install_dir /srv/valheimlogin anonymousapp_update 896660 validatequit$ ./steamcmd.sh +runscript /home/steam/update-valheim.txtორი @ ხაზი პარამეტრებია და არა ბრძანებები. @ShutdownOnFailedCommand 1 აიძულებს SteamCMD-ს პირველ შეცდომაზე გაჩერდეს და quit-მდე არ გააგრძელოს და ისე არ გავიდეს, თითქოს ყველაფერი კარგადაა - მის გარეშე cron job-ში ჩავარდნილი ჩამოტვირთვა ზუსტად წარმატებულს ჰგავს. @NoPromptForPassword 1 უყურადღებო გაშვებას login prompt-ზე სამუდამოდ გაჩერებისგან იცავს.
კიდევ ორი პარამეტრი, რომლის ცოდნაც ღირს:
@sSteamCmdForcePlatformType windowsაპლიკაციის Windows build-ს Linux ჰოსტზე ჩამოტვირთავს. ასე ყენდება Linux-ზე Wine-ში გასაშვებად სერვერები, რომლებიც მხოლოდ Windows binary-ს აწვდიან - The Forest ჩვეულებრივი მაგალითია.@sSteamCmdForcePlatformBitness 64აიძულებს 64-ბიტიან depot-ს, სადაც აპლიკაცია ორივეს სთავაზობს.
SteamCMD-ის exit code-ს ნუ გაიხდი წარმატების ერთადერთ შემოწმებად. ისტორიულად ის ვერსიებს შორის საიმედო არ ყოფილა. საიმედო ტესტი არის ხაზი, რომელსაც დასრულებისას ბეჭდავს:
Success! App '896660' fully installed.ეძებე ის wrapper სკრიპტში და მისი არარსებობა ჩავარდნად მიიჩნიე. თუ ამას cron-ის ნაცვლად პანელიდან ავტომატიზირებ, დაგეგმილი დავალებები, რომლებიც ღირს ფარავს, როგორ გამოიყურება გონივრული განახლებისა და restart-ის განრიგი.
ერთი ზომის შენიშვნა, რომელიც ჩავარდნილ განახლებებს ყველაფერზე მეტს იწვევს: SteamCMD ჩამოტვირთვას იმავე volume-ზე ათავსებს, რომელსაც ანახლებს, ამიტომ განახლებას არსებულ ინსტალაციაზე დამატებით დაახლოებით შეცვლილი ფაილების ზომის თავისუფალი ადგილი სჭირდება. დისკი, რომელიც ზუსტად თამაშზეა გათვლილი, დისკია, რომლის შემდეგი განახლებაც ვარდება, ხშირად app manifest-ის შესახებ შეცდომაში შეცდომაში შემყვანი შეტყობინებით. დატოვე 20-დან 30 პროცენტამდე თავისუფალი.
Workshop-ის ჩამოტვირთვა ბრძანების ხაზიდან#
Workshop ნივთები id-ით ჩამოიტვირთება თამაშის app id-ის მიმართ:
$ ./steamcmd.sh +force_install_dir /srv/arma3 +login myspareaccount \ +workshop_download_item 107410 463939057 +quitნივთი ჩნდება ინსტალაციის დირექტორიაში steamapps/workshop/content/<gameappid>/<itemid>/-ში, ხოლო manifest steamapps/workshop/appworkshop_<gameappid>.acf-ში ინახავს, რა და როდის იქნა მიღებული. ამ ფაილის წაშლა ყველაფრის ხელახალ ჩამოტვირთვას აიძულებს, რაც სტანდარტული გამოსწორებაა ნივთისთვის, რომელიც Steam-ზე განახლდა და ლოკალურად განახლებაზე უარს ამბობს.
Anonymous login Workshop-ის კონტენტისთვის ზოგ თამაშში მუშაობს და ზოგში არა, და თამაშები, რომლებიც სერვერისთვის ფლობის მქონე ანგარიშს მოითხოვენ, ჩვეულებრივ აქაც მოითხოვენ. SteamCMD ასევე ვერ აფართოებს კოლექციას - ის მხოლოდ ცალკეული ნივთების id-ებს იგებს. ამ ყველაფრის მექანიკა, მათ შორის როგორ აღწევს კონტენტი მოთამაშეებამდე და რა ხდება, როცა ავტორი ნივთს, რომელზეც დამოკიდებული ხარ, უჩვენებელს ხდის, არის Steam Workshop mod-ები dedicated სერვერებზე.
შეცდომები და რას ნიშნავენ ისინი სინამდვილეში#
| შეტყობინება | რას ნიშნავს |
|---|---|
Failed to install app 'X' (No subscription) | შესულ ანგარიშს ის არ აქვს, ან აპლიკაცია anonymous-ს არ იღებს |
Failed to install app 'X' (Invalid Platform) | ამ depot-ის build ამ OS-ისთვის არ არსებობს. სცადე @sSteamCmdForcePlatformType |
Failed to install app 'X' (Disk write failure) | სავსე დისკი, ან დირექტორია, სადაც მომხმარებელი ვერ წერს |
Failed to install app 'X' (Missing file permissions) | ინსტალაციის დირექტორიის არასწორი მფლობელი, ჩვეულებრივ root-ის ინსტალაცია |
Failed to install app 'X' (Timeout downloading item) | ნელი ან შეწყვეტილი გადაცემა. სცადე თავიდან; დიდ Workshop ნივთებს ხშირად ორი მცდელობა სჭირდებათ |
Rate Limit Exceeded | ძალიან ბევრი შესვლის მცდელობა. დაელოდე; უფრო სწრაფად ცდა ამას აგრძელებს |
error while loading shared libraries: libstdc++.so.6 | 32-ბიტიანი ბიბლიოთეკები აკლია |
Failed to load steamclient.so | იგივე მიზეზი, ან ნაწილობრივ გახსნილი SteamCMD |
Update state (0x61) downloading და პროგრესი არ არის | დისკი ან ქსელი და არა Steam. ჯერ თავისუფალი ადგილი შეამოწმე |
ორი ნიმუში ფარავს დარჩენილის უმეტესობას. ბრძანება, რომელიც თითქოს არაფერს აკეთებს, ჩვეულებრივ login-მდე გაეშვა, რადგან force_install_dir და app_update ორივე შესულობაზეა დამოკიდებული. და ინსტალაცია, რომელიც ერთსა და იმავე ფაილზე განმეორებით გზაში ვარდება, ბევრად უფრო ხშირად დისკის პრობლემაა, ვიდრე Steam-ის.
Container-ზე დაფუძნებულ ჰოსტზე ერთი დამატებითი ჩავარდნის რეჟიმია, რომელსაც სახელი ეკუთვნის. თუ სერვერი ინსტალაციისას მეხსიერების ლიმიტს მიაღწევს, container ჩერდება და swap-ზე არ რჩება, და შემდეგ ხედავ ნახევრად ჩაწერილ ინსტალაციის დირექტორიას. გამოსწორება ინსტალაციის validate-ით ხელახლა გაშვებაა; ამ ქცევის ზოგადი სახე აღწერილია რატომ ეშვება შენი game server განუწყვეტლივ თავიდან-ში.
FAQ#
უნდა ვფლობდე თამაშს, რომ მისი dedicated სერვერი გავუშვა?
ჩვეულებრივ არა. უმეტესი dedicated-server აპლიკაცია login anonymous-ით ჩამოიტვირთება. Arma 3, DayZ და Project Zomboid გავრცელებული გამონაკლისებია: მათ სერვერის ხელსაწყოებს Steam ანგარიში სჭირდება, რომელიც თამაშს ფლობს, და ასევე მათ Workshop-ის ჩამოტვირთვებს.
რას აკეთებს validate სინამდვილეში?
ის ყველა დაყენებულ ფაილს Steam-ის manifest-თან ჰეშავს და ყველაფერს ცვლის, რაც არ ემთხვევა. ის ასწორებს დაზიანებას და ნახევრად დასრულებულ განახლებებს, და ასევე აბრუნებს ნებისმიერ ფაილს, რომელიც შენ შეცვალე და აპლიკაციას მოჰყვებოდა. გამოიყენე ჩავარდნის შემდეგ და არა დიდი ინსტალაციის ყოველ restart-ზე.
შემიძლია კონკრეტული ძველი ვერსიის დაყენება?
მხოლოდ თუ გამომცემელი მას დასახელებულ branch-ად სთავაზობს, რომელიც -beta-თი ირჩევა. SteamCMD-ს თვითნებური build id-ისთვის არგუმენტი არ აქვს. თუ უკან დაბრუნება უნდა შეგეძლოს, განახლებამდე შეამოწმე, აქვეყნებს თუ არა თამაში legacy branch-ს.
სად მიდის ფაილები, თუ force_install_dir-ს არ დავაყენებ?
SteamCMD-ის საკუთარი საქაღალდის შიგნით steamapps/common/<AppName>-ში. ეს ერთი სერვერისთვის კარგია და რამდენიმესთვის დამაბნეველი, ამიტომ ყველა გზამკვლევი დირექტორიას ცხადად აყენებს. გამოიყენე აბსოლუტური path, რადგან ფარდობითი path-ები SteamCMD-ის დირექტორიის მიმართ წყდება და არა შენი shell-ის.
რატომ იტყობინება ჩემი სკრიპტული განახლება წარმატებას, როცა არაფერი ჩამოტვირთულა?
რადგან SteamCMD-ის exit code საიმედო სიგნალი არ არის. დაამატე სკრიპტში @ShutdownOnFailedCommand 1, რომ პირველ შეცდომაზე გაჩერდეს, და შენს wrapper-ს $?-ის შემოწმების ნაცვლად გამოსავალში Success! App 'X' fully installed. შეამოწმებინე.
როგორ ვიცი, რომელ build-ზეა ჩემი სერვერი?
წაიკითხე steamapps/appmanifest_<appid>.acf ინსტალაციის დირექტორიაში. ის ჩაწერს დაყენებულ build id-ს. SteamCMD-ში app_info_print <appid> აჩვენებს თითოეულ branch-ზე ამჟამად გამოქვეყნებულ build id-ებს, რასაც მას ადარებ.




კომენტარები
სრულიად ანონიმურად: ანგარიშის, ელფოსტის და cookie-ის გარეშე. ინახება მხოლოდ სახელი, ტექსტი და დრო - სხვა არაფერი. ბმულების რაოდენობა ლიმიტირებულია.