2010-12-10 3 views
46

Tôi đã cố gắng tạo một cronjob với nhiệm vụ thực hiện git pull mỗi phút để giữ cho trang web sản xuất của tôi đồng bộ với nhánh chính của tôi.Git auto-pull sử dụng cronjob

Lệnh git pull cần được thực hiện bởi người dùng hệ thống nobody, do sự cố về quyền. Tuy nhiên có vẻ như tài khoản nobody không được phép chạy lệnh. Vì vậy, tôi phải tạo các tác vụ với tư cách là người dùng root.

Mục crontab tôi đã cố gắng:

*/1 * * * * su -s /bin/sh nobody -c 'cd ~heilee/www && git pull -q origin master' >> ~/git.log 

Nó không làm việc, và tôi không biết làm thế nào để gỡ lỗi nó.

Có ai giúp được không?

CẬP NHẬT 1: chính lệnh git pull là chính xác. Tôi có thể chạy nó mà không có lỗi.

+0

gì xảy ra khi bạn chạy các lệnh riêng của mình trong một vỏ? – Tom

+0

Bạn có người dùng có tên 'git.log' không? – Dustin

+0

@Tom nó chạy nếu tôi chạy lệnh. – kayue

Trả lời

24

Giải pháp:

*/1 * * * * su -s /bin/sh nobody -c 'cd ~dstrt/www && /usr/local/bin/git -q pull origin master' 
+2

không hoạt động đối với tôi trên ubuntu 10.04 máy chủ. 3 lỗi khác nhau (~,/local/và -q tất cả nguyên nhân gây ra sự cố) – hobs

+9

'*/1 * * * * su -s/bin/sh không có ai 'cd/home/dstrt/src/project &&/usr/bin/git pull origin master'' hoạt động tốt hơn cho tôi: ~ mở rộng đáng tin cậy hơn, đường dẫn khác tới git cho distro của tôi, và tùy chọn -q cho git phải sau 'pull' hoặc không có gì cả, nếu không git barfs. – hobs

+0

*/1 * * * */bin/sh -c 'cd/đường dẫn/đến/repo &&/usr/bin/git kéo -q nguồn gốc' làm việc cho tôi. – aaronbauman

9

Trong khi bạn cần tìm ra cách để cập nhật hoạt động ngay từ đầu, bạn nên sử dụng móc từ phía trên để làm cho nó hoạt động tốt hơn. Bạn có thể làm điều này chỉ đơn giản với curl từ một móc post-commit hoặc nếu bạn đang sử dụng github, chỉ cần sử dụng một móc sau khi nhận được về phía họ.

+0

Một cái móc sạch hơn nhiều so với sử dụng cron. Hooks chỉ là các kịch bản lệnh, vì vậy bạn có thể có một cái gì đó như 'cd/path/to/production && git pull'. –

+0

Tôi có thể chạy móc sau cam kết là 'không ai' không? – kayue

+0

Tôi đã thử tập lệnh này (https://gist.github.com/737188) nhưng có sự cố cấp phép vì việc sử dụng tập lệnh này không có quyền đối với thư mục đích – kayue

5
*/1 * * * * su -s /bin/sh nobody -c 'cd /home/heilee/src/project && /usr/bin/git pull origin master' 

này sửa chữa một vài lỗi mà ngăn chặn sự trả lời chấp nhận từ làm việc trên hệ thống của tôi (Ubuntu> 10,04 server). Thay đổi quan trọng có vẻ là -q sau pull thay vì trước đây. Bạn sẽ không nhận thấy rằng thao tác kéo của bạn không hoạt động cho đến khi bạn kết thúc tệp /var/log/syslog hoặc cố gắng chạy mã sản xuất không được cập nhật của mình.

2
#!/bin/bash 
cd /home/your_folder/your_folder && /usr/bin/git pull [email protected]:your_user/your_file.git 

đó là đã được sử dụng bởi tôi và làm việc

+0

&& chạy lệnh trong nền. sử dụng ; thay thế &&. để chạy lệnh tuần tự. –