Tôi muốn người dùng chạy một quy trình cụ thể trên hệ thống với giá trị tốt âm. Tôi không thể đơn giản rẽ nhánh quá trình để làm nền vì chương trình cụ thể này là máy chủ minecraft và tôi dựa vào dòng lệnh để điều khiển máy chủ.
Kịch bản bash hiện tại của tôi trông như thế này (phần quan trọng):
sleep 10 && \
sudo renice -n $NICENESS $(ps -u $(id -u) -o "%p:%c" | sed -n "s/:java$//p") & \
java -Xmx8G -Xms2G -jar minecraft_server.jar nogui
sleep
chỉ đơn giản là trì hoãn thực hiện renice
. renice
chính nó sử dụng ps
để kiểm tra quá trình java bằng ID riêng của người dùng. Có thể có các trường hợp khác của java sinh sản dưới những người dùng khác nhau, nhưng máy chủ minecraft chạy dưới minecraft người dùng của chính nó .
Tôi rõ ràng không muốn nhập mật khẩu mỗi khi tôi khởi động máy chủ.
từ / etc / sudoers :
minecraft ALL = NOPASSWD: /etc/renice
Có một cách thanh lịch hơn để làm điều này? Sử dụng đơn giản nice
không phải là một tùy chọn, sudo nice bash
kết hợp với tùy chọn NOPASSWD: sẽ là một vấn đề bảo mật tuyệt vời.
nice
dường như không làm được, tôi phải đặt cả hai, sử dụng-
.