เรียกใช้ไฟล์แบตช์เป็นบริการ Windows


159

ในการเรียกใช้แอปพลิเคชั่นหนึ่งไฟล์แบตช์จะต้องถูกเตะออก (ซึ่งจะทำสิ่งต่าง ๆ เช่นเริ่มท่าเทียบเรือแสดงบันทึกสด ฯลฯ ) แอปพลิเคชันจะทำงานเฉพาะเมื่อไฟล์แบทช์นี้กำลังทำงาน ฉันจึงถูกบังคับให้ต้องเปิดไฟล์แบตช์นี้และไม่ออกจากระบบเซิร์ฟเวอร์ Windows

ไฟล์ชุดนี้สามารถเรียกใช้เป็นบริการได้หรือไม่? ฉันกำลังทดลองกับหนึ่งในข้อเสนอแนะจากคำถามที่คล้ายกัน


27
การเขียนโปรแกรมแบทช์เป็นหัวข้อสำหรับการแลกเปลี่ยนแบบสแต็ก
Harry Johnston

12
คำถามที่ดี. +1 ผู้ดำเนินรายการโกรธเกินไป ... ฉันมีคำตอบที่ดีอีกคำถามหนึ่ง แต่คำถามถูกปิด ((
gavenkoa

ผมใช้ RunAsService นี้แทน: runasservice.com มันใช้ง่ายกว่ามาก ไม่มีการกำหนดค่า XML ไร้สาระ โดยพื้นฐานแล้วนี่เป็นเพียงการเรียกใช้งาน RunAsService.exe ซึ่งหุ้มแอปพลิเคชันคอนโซลใด ๆ ที่มีอาร์กิวเมนต์บรรทัดคำสั่งเป็นบริการ ฉันใช้สิ่งนี้เพื่อเรียกใช้สคริปต์ทุบตี Cygwin เป็นบริการ !!! น่าเสียดายที่เครื่องมืออย่างง่ายนี้ดูเหมือนว่าจะเป็นแบบปิด
Kaz

8
เสนอชื่อให้เปิดอีกครั้งบนพื้นฐานของ "เครื่องมือซอฟต์แวร์ที่ใช้กันทั่วไปโดยโปรแกรมเมอร์" คำตอบของคำถามนี้คืออะไร โปรดจำไว้ว่านี่เป็นผลลัพธ์แรกของ Google เมื่อค้นหา "windows start batch file เป็นบริการ" ดังนั้นไม่ว่าจะอยู่ในขอบเขตที่แคบซึ่งผู้ดำเนินการบางรายมี 'ในหัวข้อ' ที่เหลือของโลกคิดว่าเป็น ฉันลงคะแนนให้ลัทธิปฏิบัตินิยมมากกว่าลัทธิความหยิ่งยโสที่นี่
Adam Cameron

คำถามที่คล้ายกันสามารถพบได้ที่ serverfault serverfault.com/questions/54676/…
Stephen Quan

คำตอบ:


151

NSSMนั้นฟรีและง่ายต่อการรันพร้อมรับคำสั่ง / เทอร์มินัลในฐานะผู้ดูแลระบบ:

nssm install "YourCoolServiceNameLabel"

จากนั้นไดอะล็อกจะปรากฏขึ้นเพื่อให้คุณสามารถเลือกว่าไฟล์ใดที่คุณต้องการเรียกใช้

เพื่อถอนการติดตั้ง

nssm remove "YourCoolServiceNameLabel"

25
+1 ไม่เคยได้ยินเรื่องนี้ แต่มันเยี่ยมมาก NSSM ไม่ดูดแน่นอน!
Byron Whitlock

1
ใช้เวลา 2 นาทีในการติดตั้งบริการ
เบ็นไวลด์

3
@Junior M ขอบคุณ !! คุณช่วยฉันไว้. ฉันใช้เวลา 4 ชั่วโมงสำหรับสิ่งนี้ ขอบคุณ !!
verystrongjoe

2
คุณรู้หรือไม่ว่ามีวิธีให้nssmargs ที่จำเป็นทั้งหมดที่อินพุตเพื่อหลีกเลี่ยงการป้อนข้อมูลป๊อปอัพ - ฉันพยายามทำให้กระบวนการอัตโนมัติหรือไม่
สัตว์สะเทินน้ำสะเทินบก

1
NSSM ยังคงถูกลบไปที่ลูกค้าของเราบางคนโดยโปรแกรมป้องกันไวรัส GDATA ใช่ฉันรู้ว่ารายการที่อนุญาต ... แต่ลูกค้าไม่ทำสิ่งที่ดีสำหรับพวกเขา นั่นคือความจริงที่น่าเศร้า
ประธาน Dreamspace

61

ทำไมไม่เพียงตั้งค่าเป็นงานที่กำหนดเวลาไว้ซึ่งเริ่มทำงานเมื่อเริ่มต้นระบบ


1
ฉันมีแบทช์ไฟล์จำนวนมากที่ทำการสำรองข้อมูลผ่าน robocopy ที่ฉันเริ่มผ่านทาง Scheduled Tasks (ไปที่ Control Panel, Scheduled Tasks) ที่ทำงานบนเซิร์ฟเวอร์ Win 2003 ทำงานได้ดี ...
SAL

เพียงแค่ใช้สคริปต์ที่เราใช้ในการตรวจสอบบริการสำรองข้อมูลของเรา มันทำงานเหมือนจับใจ
music2myear

1
นี่คือทางออกที่ดีที่สุดของ IMO ไม่ต้องใช้ซอฟต์แวร์ของบุคคลที่สามและไม่มีส่วนต่อประสานบรรทัดคำสั่ง พลัส Task Scheduler มีจำนวนมากของตัวเลือกสำหรับทริกเกอร์เงื่อนไขอื่น ๆ
dev

3
ทำงานตอนนี้ที่ฉันคิดออกนี้: เมื่องานรันเมื่อเริ่มต้น (ด้วย "เรียกใช้ไม่ว่าผู้ใช้เข้าสู่ระบบหรือไม่")% UserProfile% คือ C: \ Users \ Default \ เวลาอื่น ๆ มันจะเป็น C: \ Users \ ExpectedUser \ สิ่งนี้สามารถสร้างความล้มเหลวอย่างลึกลับสำหรับไฟล์. bat บางไฟล์ที่ดูเหมือนว่าจะทำงานได้ดีในงานที่กำหนดเวลาไว้อื่น ๆ
user1754036

2
งานที่กำหนดเวลาไว้ไม่น่าเชื่อถือ - ฉันเจอคำถามนี้จริง ๆ เพราะปัญหาทั้งหมดที่ฉันมีกับงานที่ไม่ได้เปิดตัวตามกำหนดเวลาโดยไม่มีเหตุผลที่ชัดเจน

22

มีการสร้างขึ้นในหน้าต่าง cmd จะทำเช่นนี้: SC สร้าง ไม่แฟนซีเท่า nssm แต่คุณไม่จำเป็นต้องดาวน์โหลดซอฟต์แวร์เพิ่มเติม

sc create "ServiceName" start= demand displayname= "DisplayName" binpath= [path to .bat file]

บันทึก

  • start = demand หมายความว่าคุณต้องเริ่มบริการด้วยตัวเอง
  • ต้องการพื้นที่ว่างหลังจาก =
  • ฉันพบข้อผิดพลาดในการให้บริการเริ่มต้นว่าบริการไม่ตอบสนองในเวลาที่เหมาะสม แต่ชัดเจนว่าบริการได้เรียกใช้. bat เรียบร้อยแล้ว ยังไม่ได้ขุดลงในสิ่งนี้ แต่เธรดนี้ประสบสิ่งเดียวกันและแก้ไขโดยใช้ nssm เพื่อติดตั้งบริการ

4
Windows ดูเหมือนจะไม่เรียกใช้ไฟล์. bat เป็นบริการ
Perkins

@Perkins - ฉันทำงานเมื่อวานนี้ในเครื่องคู่ คุณกำลังประสบกับบางสิ่งบางอย่างที่เฉพาะเจาะจงหรือไม่? ฉันพบข้อผิดพลาดที่บริการไม่ตอบสนองทันเวลาเมื่อเริ่มต้น แต่ไฟล์. bat เป็นการเริ่มต้นเซิร์ฟเวอร์ Kibana node.js และทำงานได้สำเร็จแม้จะมีข้อผิดพลาด ผู้ชายในกระทู้นี้ดูเหมือนจะได้รับประสบการณ์แบบเดียวกัน แต่ไม่ได้อยู่กับ nssm stackoverflow.com/a/40130630/885535
w00ngy

2
ในกรณีของฉันไฟล์แบตช์ที่ควรสร้างไม่ได้ถูกสร้างขึ้นและโปรแกรมไม่ทำงานดังนั้นฉันต้องสมมติว่ามันไม่ได้เริ่มต้น ฉันจัดการเพื่อหลีกเลี่ยงมันโดยการสร้างบริการเพื่อเรียกใช้ cmd.exe / C <batchfile> แทน โปรดทราบว่าฉันใช้ Windows 10 ดังนั้นนี่อาจเป็นเรื่อง "ความปลอดภัย" ใหม่
Perkins

@Perkins ฉันเพิ่งได้รับมันทำงานบน win10 1803 ไม่มีปัญหาเริ่มต้นเซิร์ฟเวอร์ node.js ของฉัน ไฟล์ bat สร้างไฟล์และเรียกใช้บริการเมื่อถูกเรียกจาก cmd หรือ powershell หรือไม่? คุณได้รับกล่องข้อความใด ๆ เมื่อคุณเริ่มบริการหรือไม่ บริการของคุณมีสิทธิ์ในไดเรกทอรีเหล่านั้นหรือไม่ คุณสามารถเพิ่มการบันทึกข้อผิดพลาดในค้างคาวโดยการเขียนไปยังไฟล์บันทึกการทำงานท้องถิ่นดูว่ามันใช้งานได้
w00ngy

1
รับ " ข้อผิดพลาด 1,053: บริการไม่ตอบสนองต่อการร้องขอเริ่มต้นหรือการควบคุมในเวลาที่เหมาะสม "
อเล็กซ์

5

ไม่จำเป็นต้องมีซอฟต์แวร์เพิ่มเติม ใช้ task scheduler -> create task -> hidden ช่องทำเครื่องหมายสำหรับซ่อนอยู่ที่มุมล่างซ้าย ตั้งค่าภารกิจให้ทริกเกอร์เข้าสู่ระบบ (หรือเงื่อนไขใด ๆ ที่คุณต้องการ) และเลือกงานในแท็บการกระทำ การซ่อนมันทำให้มั่นใจได้ว่างานจะทำงานเงียบ ๆ ในพื้นหลังเหมือนบริการ

โปรดทราบว่าคุณต้องตั้งค่าโปรแกรมให้เรียกใช้ "ไม่ว่าผู้ใช้เข้าสู่ระบบหรือไม่" หรือโปรแกรมจะยังคงทำงานในเบื้องหน้า


3

ดังที่ Doug Currie กล่าวว่าใช้ RunAsService

จากประสบการณ์ที่ผ่านมาของฉันคุณต้องจำไว้ว่าบริการที่คุณต้องการ

  • มีชุดตัวแปรสภาพแวดล้อมที่แตกต่างอย่างสิ้นเชิง
  • จะต้องมีการตรวจสอบอย่างรอบคอบสำหรับปัญหาสิทธิ์ / สิทธิ์
  • อาจทำให้เกิดความเสียหายหากเปิดกล่องโต้ตอบเพื่อขออินพุตทุกชนิด

ไม่แน่ใจว่าถ้าคนสุดท้ายยังคงใช้ ... มันเป็นหนึ่งคืนใหญ่ม้าในโครงการที่ฉันทำงานในบางเวลาที่ผ่านมา


3

ในขณะที่มันไม่ฟรี (แต่ $ 39), FireDaemonทำงานได้ดีสำหรับฉันฉันต้องแนะนำ มันจะเรียกใช้ไฟล์แบทช์ของคุณ แต่มีฟังก์ชั่นเพิ่มเติมและมีประโยชน์มากมายเช่นการตั้งเวลาการตรวจสอบการบริการการติดตั้งบริการ GUI หรือ XML การอ้างอิงตัวแปรทางสิ่งแวดล้อมและการจัดการบันทึก

ฉันเริ่มใช้ FireDaemon เพื่อเรียกใช้ JBoss แอ็พพลิเคชันเซิร์ฟเวอร์ ( run.bat ) แต่หลังจากนั้นไม่นานฉันก็รู้ว่าความสามารถในการกำหนดค่า FireDaemon ที่สมบูรณ์ทำให้ฉันสามารถทิ้งแบตช์ไฟล์และสร้างเจตนาของคำสั่งในนิยามบริการ FireDaemon

นอกจากนี้ยังมี SUPER FireDaemon ชื่อ Trinity ซึ่งคุณอาจต้องการตรวจสอบว่าคุณมีเซิร์ฟเวอร์ Windows จำนวนมากที่จะจัดการบริการนี้ (หรือในทางเทคนิคบริการใด ๆ )


2

บนเซิร์ฟเวอร์ Windows 2019 คุณสามารถเรียกใช้เซิร์ฟเวอร์ Minecraft java ด้วยคำสั่งเหล่านี้:

sc สร้าง minecraft- เซิร์ฟเวอร์ DisplayName = "minecraft-server" binpath = "cmd.exe /CC:\Users\Administrator\Desktop\rungui1151.lnk" ประเภท = own start = auto

ไฟล์. lnk เป็นทางลัดหน้าต่างมาตรฐานของไฟล์แบตช์

--- .bat เริ่มต้นไฟล์ ---

java -Xmx40960M -Xms40960M -d64 -jar minecraft_server.1.15.1.jar

--- .bat สิ้นสุดไฟล์ ---

ทั้งหมดนี้เพราะ:

บริการไม่ทราบวิธีเริ่มต้นในโฟลเดอร์

cmd.exe ไม่ทราบวิธีเริ่มต้นในโฟลเดอร์

การเริ่มบริการจะก่อให้เกิดข้อผิดพลาด "ทันเวลา" แต่ไฟล์บันทึกพบว่าเซิร์ฟเวอร์กำลังทำงาน

หากคุณต้องการปิดเซิร์ฟเวอร์เพียงไปที่ตัวจัดการงานและค้นหาเซิร์ฟเวอร์ java ในกระบวนการพื้นหลังและจบหรือยุติเซิร์ฟเวอร์จากในเกมโดยใช้คำสั่ง / หยุดหรือสำหรับโปรแกรม / เซิร์ฟเวอร์อื่น ๆ ใช้วิธีการ เกี่ยวข้องกับเซิร์ฟเวอร์


สิ่งนี้ไม่ได้ให้คำตอบสำหรับคำถาม เมื่อคุณมีเพียงพอชื่อเสียงคุณจะสามารถที่จะแสดงความคิดเห็นในโพสต์ใด ๆ ; แทนที่จะให้คำตอบที่ไม่จำเป็นต้องชี้แจงจากผู้ถาม - จากการรีวิว
Jeremy J Starcher

1
ถ้าคุณอ่านอย่างถูกต้องคุณจะสังเกตเห็นว่ามันมีคำตอบที่สมบูรณ์เกี่ยวข้องกับตัวอย่าง
Goofyseeker311

0

AlwaysUpจะเรียกใช้ไฟล์แบตช์ของคุณเป็นบริการได้อย่างง่ายดาย มันคล้ายกับ FireDaemon (ดังกล่าวข้างต้น) และไม่ฟรี แต่คุณอาจพบว่าคุณลักษณะที่หลากหลายเป็นสินทรัพย์ในสภาพแวดล้อมแบบมืออาชีพ

โชคดี!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.