2011-09-03 47 views
6

Tôi đã tạo một tập lệnh chạy trong nền sử dụng hàm ignore_user_abort(). Tuy nhiên, tôi đã đủ ngu ngốc để không chèn bất kỳ loại mã nào để làm cho tập lệnh dừng lại và bây giờ nó đang gửi e-mail cứ mỗi 30 giây ...Gõ tập lệnh php nền (shared hosting)

Có cách nào để dừng tập lệnh không? Tôi đang ở trong một lưu trữ được chia sẻ, vì vậy tôi không có quyền truy cập vào dấu nhắc lệnh, và tôi không biết PID.

+0

bạn có quyền truy cập SSH không? –

+2

Sử dụng 'hệ thống' để chạy'/bin/ps' và tìm PID của quá trình vi phạm, sau đó ['posix_kill'] (http://ca.php.net/manual/en/function.posix-kill.php) để giết nó. Có thể nhà cung cấp dịch vụ lưu trữ được chia sẻ của bạn có bảng điều khiển của một số loại có công cụ quản lý quy trình. –

+3

Nếu đây là sự kiện số ít, bạn chỉ nên gọi cho bộ phận hỗ trợ ... – Olaf

Trả lời

0

cách bạn triển khai tập lệnh? chắc chắn bạn chỉ có thể loại bỏ nó (nếu đó là một lựa chọn chấp nhận được). nếu không sửa đổi nó và chèn một số logic để chỉ cho phép nó để gửi một thư một lần mỗi n phút/giờ/ngày dựa trên thời gian máy chủ?

re. dừng kịch bản từ thực thi (hay đúng hơn là hệ thống đang cố gắng thực thi nó) làm thế nào bạn lên lịch cho nó để thực thi? là một số loại gui cho một crontab hay cái gì đó? bạn có thể không chỉ hoàn tác những gì bạn đã làm ở đó (xem như bạn không có quyền truy cập vào dòng lệnh/thiết bị đầu cuối)?

cướp ganly

4

Có cách nào để ngăn chặn kịch bản? Tôi đang ở trong một lưu trữ được chia sẻ, vì vậy tôi không có quyền truy cập vào dấu nhắc lệnh, và tôi không biết PID.

Sau đó không.

Nhưng bạn có chắc chắn bạn không có quyền truy cập shell nào không? Ngay cả thông qua PHP? Nếu bạn làm thế, bạn có thể thử ....

<?php 

print `ps -ef | grep php`; 

... và nếu bạn có thể xác định quá trình này từ mà sau đó ....

<?php 

$pid=12345; // for example. 
print `kill -9 $pid`; 

Và thậm chí nếu bạn không có truy cập để chạy các lệnh shell, bạn có thể tìm thấy pid trong/proc (trên hệ thống linux) và chấm dứt nó bằng cách sử dụng phần mở rộng POSIX ....

<?php 

$ps=glob('/proc/[0-9]*'); 
foreach ($ps as $p) { 
    if (is_dir($p) && is_writeable($p)) { 
     print "proc= " . basename($p); 
     $cmd=file_get_contents($p . '/cmdline'); 
     print "/" . file_get_contents($p . '/cmdline'); 
     if (preg_match('/(php).*(myscript.php)/',$cmd)) { 
      posix_kill(basename($p), SIGKILL); 
      print " xxxxx...."; 
      break; 
     } 
     print "\n"; 
    } 
} 
0

Đơn giản. Gọi điện cho bộ phận hỗ trợ, hủy nó. Lần tiếp theo, đừng thực hiện điều gì đó mà bạn không thể kiểm soát.

1

Tôi đã đến chủ đề này Hôm qua! Tôi do nhầm lẫn có một vòng lặp vô hạn trong một trang mà không được phép truy cập và tăng I/O to 100CPU usage to 100I/O của họ là vì một số php errors và nó đã nhận được logged và kích thước tệp nhật ký đang tăng vượt quá mọi người có thể nghĩ.

Không có mẹo nào ở trên hoạt động trên shared hosting của tôi.

MY SOLUTION

  1. Trong cPanel, đi đến PHP Version (ngoại trừ dòng)

  2. Chọn bất kỳ phiên bản PHP cho thời gian tới.

  3. Và sau đó Apply Changes.

LÝ DO TẠI SAO Hack

Các kịch bản trong đó có vòng lặp vô hạn với một số lỗi php là một quá trình vì vậy tôi chỉ cần thiết để giết nó, thay đổi phiên bản php củng cố khởi động lại các dịch vụ như php và Apache, và khi khởi động lại đã được tham gia trước đó các quy trình đã bị giết, và tôi đã được thoải mái như I/OCPU sử dụng ổn định. Ngoài ra, tôi đã sửa lỗi đó trước khi thay đổi phiên bản php :)

+1

Bạn vừa lưu lại ngày của tôi .. Cảm ơn người đàn ông –

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