Muốn tạo một kịch bản mới nổi; cần giúp đỡ và lời khuyên


13

Atm, tôi cần ngẫu nhiên bắt đầu và dừng lại (vì thiếu một từ tốt hơn trong tâm trí của tôi) một công việc. Tôi bắt đầu nó bằng cách gõ java -jar foo.jarvà để ngăn chặn nó tìm ra pid của nó và giết nó. Giết nó không gây mất dữ liệu hoặc tham nhũng hoặc bất cứ điều gì, chỉ là FYI. Thật tẻ nhạt khi thực hiện cả hai bước này bởi vì lệnh đầu tiên phải được thực thi từ một thư mục cụ thể, nghĩa là /usr/share/jetty(Việc giết có thể được thực hiện từ bất cứ đâu).

Vì vậy, tôi đã suy nghĩ một cái gì đó trên dòng

service foo startservice foo stopđể bắt đầu và dừng dịch vụ. Điều đó có thể, và quan trọng hơn là đúng? Còn có những giải pháp nào nữa ko?

Cảm ơn.

Câu trả lời:


13

Yeah Upstart là một lựa chọn khá tốt cho việc này. Chỉ cần tạo một tệp mới:

sudoedit /etc/init/my-jetty-jar.conf

Bạn có thể thay đổi tên tệp thành bất cứ thứ gì bạn thích nhưng sau đó dán tên này vào đó:

description     "Run my jetty jar"

# no start option as you might not want it to auto-start
# This might not be supported - you might need a: start on runlevel [3]
stop on runlevel [!2345]

# if you want it to automatically restart if it crashes, leave the next line in
respawn

script
    cd /usr/share/jetty
    su -c "/usb/bin/java -jar /path/to/foo.jar" nobody
end script

Một số lưu ý về điều đó, tôi sukhông muốn bảo mật. Bạn có thể cần nó suvào một tài khoản khác nhưng có lẽ không nên chạy như vậy root.


Có cần thiết phải khởi động lại để những thay đổi có hiệu lực? update-rc.dkhông hoạt động /
theTuxRacer

Bạn không cần update-rc.dcho công việc mới bắt đầu.
Oli

khởi động đồng hồ / etc / init bằng cách sử dụng inotify, vì vậy nó thường biết về tất cả các chỉnh sửa đối với các tệp bên dưới. Không cần làm gì ngoại trừ 'start my-jetty-jar'. Ồ, và @Oli, bạn chắc chắn có thể có một công việc mà không cần bắt đầu. Lưu ý rằng việc dừng trên runlevel [! 2345] có thể bị gắn cờ trong tương lai là một cách tồi để ngăn chặn mọi thứ (vì điều đó không đảm bảo rằng chúng sẽ dừng trước khi hệ thống tập tin không được kết nối)
SpamapS

Thật không may, giải pháp của bạn dường như không hoạt động (nữa) cho Jetty 8 khi start.jar sinh ra một quy trình khác, sẽ không bị giết theo cách tiếp cận của bạn. Tôi đã tạo một câu hỏi khác để giải quyết vấn đề này: stackoverflow.com/questions/10796242/
Khăn

4
@Sebi Bạn có thể chỉ cần dán một cái expect forkở đó (trước khi scriptbắt đầu).
Oli
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.