Gần đây tôi mới thiết lập repo git từ xa trên máy chủ cho một ứng dụng web chạy dưới dạng dịch vụ Upstart. Tôi muốn sử dụng hook sau nhận để kích hoạt các hành động được yêu cầu để cập nhật mã ứng dụng và dừng sau đó khởi động lại dịch vụ khởi động. Đây là tập tin repo.git / hook / post-receive của tôi:
#!/bin/bash
export GIT_WORK_TREE=/var/www/current/myapp/
echo "Checking out new files and restarting app"
echo $USER
git checkout -f
sudo /sbin/stop myapp-service
sudo /sbin/start myapp-service
Dựa trên thông tin tôi đọc ở đây: askUbfox.com , cách để có được các lệnh khởi động để thực thi với quyền root là chỉnh sửa tệp visudo của tôi. Đây là đoạn trích có liên quan:
%sudo ALL=(ALL:ALL) ALL
admin ALL=(ALL:ALL) NOPASSWD: /sbin/start myapp-service /sbin/stop myapp-service
Nhưng khi tôi git đẩy đến điều khiển từ xa, tôi nhận được đầu ra như:
$ git commit -am "test" && git push prod master
[master 59ffccd] test
1 file changed, 1 insertion(+), 1 deletion(-)
Counting objects: 11, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 544 bytes, done.
Total 6 (delta 4), reused 0 (delta 0)
remote: Checking out new files on production and restarting app
remote: admin
remote:
remote: sudo: no tty present and no askpass program specified
remote: Sorry, try again.
Tôi đã kiểm tra rằng người dùng chính xác đang thực thi tập lệnh nhận (quản trị viên, như đã lặp lại ở trên).
Ai đó có thể giúp tôi dừng lại và sau đó bắt đầu công việc Upstart trong một kịch bản hook sau nhận git không? Các tập lệnh javascript của Python, PHP hoặc node.js cũng có thể được chấp nhận nếu chúng có thể thực thi lệnh khởi động dễ dàng hơn bash (Tôi là một người mới chơi bash)
Tôi đã xem trong nhật ký xác thực của mình và đây là những gì tôi có:
Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): auth could not identify password for [admin]
Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): conversation failed
Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): auth could not identify password for [admin]
Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): conversation failed
Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): auth could not identify password for [admin]
Apr 24 19:35:21 myhost01 sudo: admin : 3 incorrect password attempts ; TTY=unknown ; PWD=/home/admin/myapp.git ; USER=root ; COMMAND=/s$
Apr 24 19:35:21 myhost01 sudo: unable to execute /usr/sbin/sendmail: No such file or directory
Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): conversation failed