Bạn có thể nhanh chóng chuyển đến câu hỏi bắt đầu đọc từ 'Đã nói rằng'
Sau đây là chi tiết về nhu cầu cụ thể của tôi
Tôi đang sử dụng một phần mềm Ubuntu và đang cố gắng tạo một trình khởi chạy máy tính để bàn để bắt đầu / dừng tomcat. Tôi đang gặp vấn đề được giải thích trong chủ đề này, tôi đã mở ngày hôm qua trên diễn đàn lxde.
Về cơ bản trình khởi chạy máy tính để bàn, chỉ thực thi lệnh
/usr/local/tomcat6/bin/startup.sh
bên trong cửa sổ lxterminal hoạt động, nhưng nếu tôi đóng cửa sổ lxterminal được mở bởi trình khởi chạy và thực thi lệnh .. thì tomcat sẽ bị tắt.
Thay vào đó, tôi muốn đóng cửa sổ đó trong khi tomcat tiếp tục chạy.
Cửa sổ chỉ cần thực hiện lệnh để bắt đầu nó và không có gì khác.
Tìm kiếm bên trong mã whoooole được chạy bởi lệnh trên cuối cùng tôi thấy rằng tội lỗi là mã sau đây:
/opt/jdk1.6.0_22/bin/java \
-Dsolr.solr.home=/home/foo/solr/solr_config/current/master/ \
-Dsolr.data.dir=/home/foo/solr/data \
-Dsolr.solr.home=/home/foo/solr/solr_config/current/master/ \
-Dsolr.data.dir=/home/foo/solr/data \
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
-Djava.util.logging.config.file=/usr/local/tomcat6/conf/logging.properties \
-Djava.endorsed.dirs="/endorsed" \
-classpath ":/usr/local/tomcat6/bin/bootstrap.jar:/usr/local/tomcat6/bin/commons-logging-api.jar" \
-Dcatalina.base="/usr/local/tomcat6" \
-Dcatalina.home="/usr/local/tomcat6" \
-Djava.io.tmpdir="/usr/local/tomcat6/temp" \
org.apache.catalina.startup.Bootstrap "" start \
>> "/usr/local/tomcat6"/logs/catalina.out 2>&1 &
Trong thực tế nếu tôi chạy lệnh này bên trong một cửa sổ lxterminal mới, hành vi tương tự được chú ý:
A) tomcat bắt đầu: nếu tôi mở một lxterminal mới và gõ:
$ ps aux | grep tomcat
foo 21492 0.4 1.5 934436 47248 pts/2 Sl 11:37 0:03 /opt/jdk1.6.0_22/bin/java -Dsolr.solr.home=/home/foo/solr/solr_config/current/master/ -Dsolr.data.dir=/home/foo/solr/data -Dsolr.solr.home=/home/foo/solr/solr_config/current/master/ -Dsolr.data.dir=/home/foo/solr/data -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/usr/local/tomcat6/conf/logging.properties -Djava.endorsed.dirs=/endorsed -classpath :/usr/local/tomcat6/bin/bootstrap.jar:/usr/local/tomcat6/bin/commons-logging-api.jar -Dcatalina.base=/usr/local/tomcat6 -Dcatalina.home=/usr/local/tomcat6 -Djava.io.tmpdir=/usr/local/tomcat6/temp org.apache.catalina.startup.Bootstrap start
foo 21666 0.0 0.0 4476 768 pts/4 S+ 11:53 0:00 grep --color=auto tomcat
B) nếu tôi đóng cửa sổ lxterminal đầu tiên (cửa sổ mà tôi đã chạy lệnh dài ở trên) thì tomcat cũng tắt. Nếu, từ cửa sổ lxterminal thứ hai, tôi gõ lại
$ ps aux | grep tomcat
foo 21694 0.0 0.0 4476 772 pts/4 S+ 11:57 0:00 grep --color=auto tomcat
Phải nói rằng
lệnh looong ở trên chỉ là một công việc nền: nếu tôi mở một lxterminal và chỉ cần gõ
$ top &
[1] 21921
và, trong khi giữ cho cửa sổ này mở, tôi mở một cửa sổ lxterminal thứ hai và gõ
$ ps aux | grep top
foo 21921 0.0 0.0 2452 764 pts/2 T 12:07 0:00 top
foo 21927 0.0 0.0 4476 772 pts/4 S+ 12:08 0:00 grep --color=auto top
Tôi có thể thấy 'top' đang chạy, trong khi nếu tôi đóng cửa sổ đầu tiên và sau đó từ loại thứ hai một lần nữa
$ ps aux | grep top
foo 21927 0.0 0.0 4476 772 pts/4 S+ 12:08 0:00 grep --color=auto top
lệnh 'top' cũng bị tắt.
Vì vậy, có cách nào để bắt đầu một công việc từ cửa sổ lxterminal và công việc này vẫn chạy ngay cả sau khi đóng cửa sổ lxterminal đã bắn nó?
Để rõ ràng:
Tôi muốn mở một cửa sổ lxterminal thực thi một lệnh (như top &), hãy đóng cửa sổ lxterminal này và vẫn chạy lệnh được thực thi.
Đối với những người đọc chi tiết của tôi trên trang đầu:
điều kỳ lạ là nếu tôi mở một cửa sổ lxterminal, hãy gõ trực tiếp
/usr/local/tomcat6/bin/startup.sh
và sau đó đóng cửa sổ đó .. thì tomcat vẫn chạy. Không phải từ trình khởi chạy máy tính để bàn mà chỉ cần mở một cửa sổ lxterminal và bắn cùng một lệnh và sau đó nó đóng lại!
exit
hoặc nhấn CTRL+D
thay vì chỉ đóng cửa sổ, công việc sẽ tiếp tục chạy (nếu được chạy qua &
).
nohup
hoặcscreen
, tùy thuộc vào quá trình có tương tác hay không và bạn cần quay lại với nó.