2011-10-27 29 views
19

Tôi có một kịch bản, mà tôi cần phải chạy sau khi cam kết một dự án dưới sự kiểm soát sửa đổi git. Vì vậy, tôi đã tạo ra một cam kết bài móc trong các dự án của tôi .git thư mục trong thư mục con/móc, tên nó 'post-cam' và đưa các nội dung sau:Git sau cam kết móc như là một nhiệm vụ nền

#!/bin/sh 
# I am a post-commit hook 
/usr/local/bin/my_script & 

my_script là thực thi và chạy tốt trong/bin/sh. Trong thực tế nó có một thời gian chạy trong vài giây, vì vậy tôi muốn nó được backgrounded và tách ra khỏi vỏ hiện tại. Đó là lý do tại sao tôi đặt dấu '&' vào móc của mình.

Vấn đề bây giờ là, '&' dường như bị bỏ qua. Khi tôi cam kết sử dụng gitx 0.7.1 dưới OSX Lion, gitx bị treo cho chính xác khoảng thời gian my_script cần chạy.

Tôi đã thử rất nhiều, nhưng không tự xử lý quá trình đó.

Có gì sai ở đây?

Trả lời

13

Đây là cách nó hoạt động cho tôi:

#!/bin/sh 
# I am a post-commit hook 
nohup /usr/local/bin/my_script &>/dev/null & 
+0

David, trong khi đó tôi tìm thấy một cách tiếp cận tương tự: nohup/usr/local/bin/my_script 2> & 1>/dev/null & – GeorgieF

+0

Không chính xác câu trả lời đúng, nhưng sẽ hướng dẫn một số người: xem xét triển khai thực hiện một daemon thực. Nếu trong ruby ​​bạn có thể sử dụng Daemons hoặc đọc những điều cơ bản về những gì bạn nên làm trong mô tả này về cách một daemon hoạt động trong unix: http://daemons.rubyforge.org/Daemons.html –

2

Cố gắng sử dụng nohup

#!/bin/sh 
# I am a post-commit hook 
nohup /usr/local/bin/my_script & 
+0

Hey WagnerVaz, cố gắng điều đó, nhưng tiếc là nó không hoạt động. Kịch bản dường như không tách rời khỏi quá trình hiện tại và gitx là cũ khi tập lệnh chạy. – GeorgieF

1

Nếu bạn thay đổi #!/bin/sh-#!/bin/bash (giả sử bạn ok với việc sử dụng bash), và sử dụng nohup, ví dụ của bạn sẽ hoạt động.

3

Bạn cũng có thể sử dụng lệnh at. Bạn có thể phải cài đặt nó đầu tiên

echo /path/to/your/executable | at now 

OR:

echo bash /path/to/your/script | at now 

Xem tại (1) trang hướng dẫn để biết thêm về tại (man at hoặc the online version)

Các vấn đề liên quan