Làm cách nào để sử dụng crontab để bắt đầu phiên màn hình?


12

Tôi muốn tạo một mục crontab để nó khởi động màn hình, khởi động máy chủ trò chơi và tách ra. Đây là trong trường hợp máy chủ được khởi động lại và tôi muốn nó tự động khởi động nó cho tôi.

0 0 0 0 0 (lệnh)

nên chạy khi khởi động.

Nó chạy một tệp shell nằm ở ~ / cube / server.sh


Bạn có phải là người dùng trên máy này không, hoặc bạn có quyền truy cập vào init script không?
Corey S.


@Dennis: Yep, tôi thích điều đó. Nhưng chúng ta không thể cho rằng máy chủ trò chơi mà anh ta đang chạy không có một số loại bàn điều khiển mà anh ta cần truy cập (tức là luôn chạy ở phía trước). Khác tại sao anh ta sẽ bận tâm với màn hình? Trừ khi, tất nhiên, anh ta không nhận thức được nohup và nền.
Corey S.

Tôi là một người dùng trên máy này.
Victor

Câu trả lời:


15

Một cái gì đó như thế này sẽ làm việc. Ví dụ này sinh ra một màn hình và chạy "top":

screen -d -m top

Trong crontab của bạn, như đã chỉ ra, bạn muốn làm một cái gì đó như thế này:

@reboot /usr/bin/screen -dmS gameserver-screen /opt/mycoolgame/bin/gameserver

Tất nhiên, nếu máy chủ trò chơi yêu cầu thiết lập môi trường "bình thường", bạn có thể đến gần hơn bằng cách:

@reboot (. ~/.profile; /usr/bin/screen -dmS gameserver-screen /opt/mycoolgame/bin/gameserver)

1
những gì hiện các . ~/.profilephần làm gì?
Victor

Nó buộc thiết lập môi trường cho mục cron. Không có nó, bạn chỉ nhận được một vài mục rất cụ thể. (Xem người đàn ông crontab để biết chi tiết)
Corey S.

Tôi có một tệp .sh thực thi máy chủ trò chơi, vậy nó có hoạt động không? @reboot (. ~/cube; /usr/bin/screen -dmS gameserver-screen ./server.sh)
Victor

Đó có lẽ là cách tốt nhất để làm điều đó. Nếu điều đó hoạt động, có lẽ bạn không cần phải lo lắng về hồ sơ, nhưng nếu bạn cần $ PATH đầy đủ, v.v., bạn luôn có thể nguồn trong .profile từ tập lệnh server.sh.
Corey S.

5

Điều này là đủ ... chạy

$ crontab -e

Sau đó nhập:

@reboot screen -dmS Victor

Bạn có thể vui lòng thử và giải thích lệnh 'Victor' này liên quan đến việc chạy tập lệnh như thế nào không - ví dụ tập lệnh mà OP đã hỏi về?
Patrick

1
-S chỉ dành cho tên phiên
atx

4

Để hoàn thiện hơn, bạn cũng có thể sử dụng tmux cho mục đích thay vì screen(xem liên kết này để so sánh):

@reboot tmux new-session -d -s yourNameOfTheSession "your command to run"

0

Tôi đã có một tình huống tương tự, nhưng do những hạn chế không hợp lý khác, tôi không thể sử dụng crontab. Tôi thực sự đã có màn hình cuộc gọi inittab. (thay thế một số tên để che khuất thông tin):

XXX:5:respawn:/bin/su - useraccount -c "screen -D -m -c /home/xxxxxx/file.screenrc"

Trong 'file.screenrc' là nơi tôi thiết lập một vài tùy chọn:

sessionname obscuresessionname
multiuser on
cd
screen /home/xxxxxxx/programtostart

Bằng cách này, nó bắt đầu khởi động và nếu chương trình bị chết hoặc màn hình đóng, nó sẽ sinh ra. Nó có thể không được coi là thông thường, nhưng tôi đã phải làm việc một vài yêu cầu môi trường kỳ quặc. Nếu chúng tôi cần gỡ nó xuống, chúng tôi sẽ phải bình luận dòng đó và giết phiên. Sau đó, khi sẵn sàng để đưa nó trở lại, uncomment, và init q.

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.