Tại sao tôi không thể bắt đầu một chương trình trực tiếp từ cron?


1

Tôi hiện đang thiết lập một raspberry pi chạy Debian wheezy như một máy chủ IRC. Nó chạy hai chương trình như một người dùng thông thường khi khởi động - ngircd và atheme.

ngircd và atheme đều đăng nhập vào /var/log/syslog

ngircd được bắt đầu từ chính tệp thực thi ( /usr/local/sbin/ngircd ), cũng như Atheme ( /home/user/atheme/bin/atheme-services). Tự khởi động các chương trình khi người dùng từ thiết bị đầu cuối hoạt động không có vấn đề.

Khi tôi cố gắng khởi động ngircd (sử dụng vị trí được cài đặt) từ cron, nó chỉ đơn giản là không bắt đầu - /var/log/syslognói rằng công việc cron đã chạy, nhưng không có gì xảy ra, không có thông báo lỗi hoặc bất kỳ nhật ký nào liên quan đến ngirc. Atheme bắt đầu tốt.

Tuy nhiên, nếu tôi tạo một tập lệnh không có gì ngoài chạy ngird (sử dụng cùng một đường dẫn tôi đã sử dụng trước đó) và thêm nó vào cron, nó hoạt động tốt (cũng như chạy trực tiếp). Tại sao ngircd bắt đầu từ cron?

Nó không phải là một vấn đề lớn, nhưng nó làm cho hệ thống hơi lộn xộn hơn tôi muốn. Điều kỳ lạ là hai chương trình này hoạt động khác nhau.

Câu trả lời:


1

Tôi không có đặc quyền để bình luận, vì vậy tôi không thể yêu cầu làm rõ, nhưng tôi sẽ đề nghị chạy daemon từ một bản inits hoặc từ RC.local, chứ không phải từ cron. Cron thường được sử dụng để thực hiện mọi thứ tại một thời điểm nhất định , thường xuyên. Việc xử lý daemon và dịch vụ thường là một công việc cho hệ thống init của bạn .

Để chạy một cái gì đó như một người dùng thông thường khi khởi động:

Thêm phần này vào /etc/rc.local :

/bin/su -c '/path/to/your/executable args &' -s /bin/bash username >/dev/null 2>&1

cho 'tại sao' - Tôi thường chạy IRC với tư cách là người dùng riêng biệt, với các đặc quyền bị hạn chế hoàn toàn và cho rằng tôi không có quyền truy cập vào phần còn lại của hệ thống. Thiết lập irc mà tôi sử dụng là một loại để kiểm tra và để giúp những người muốn thiết lập IRC của riêng họ. Tôi thường không chạy ngircd, nhưng việc sử dụng crontab được thực hiện từ thiết lập không thực / anope cũ của tôi. @ khởi động lại là một cách hoàn toàn chấp nhận được để bắt đầu các ứng dụng cấp người dùng. Mặc dù thiết lập của tôi không thành công khi chạy @ restart, nhưng cùng một chương trình có thể sẽ thất bại giống hệt nếu đó là một sự khởi đầu đúng thời gian. Tôi đã nhận nó "làm việc". Tôi muốn biết tại sao nó thất bại.
Journeyman Geek

Bạn không chắc chắn, rõ ràng là bạn nhấn lỗi này: unix.stackexchange.com/questions/109804/...
rexkogitans

0

Cron chạy một cái gì đó hoạt động chính xác như

sudo - user /path/to/command

hoặc là

su user
/path/to/command

Nếu bạn muốn kiểm tra xem lệnh của bạn có thực thi hay không, bạn phải kiểm tra nó theo cách này.

Bạn có thể chỉnh sửa người dùng crontab với

crontab -e

hoặc crontab trên toàn hệ thống với quyền root

nano /etc/crontab

hoặc trình chỉnh sửa yêu thích của bạn ngoài nano (hãy thêm trước sudonếu cần). Lưu ý rằng hai crontab này khác nhau về cú pháp ở chỗ crontab trên toàn hệ thống có thêm một cột giữa thời gian thực hiện và lệnh chỉ định người dùng chạy lệnh như. Bạn muốn thời gian thực hiện của mình được đặt thành @reboot:

@reboot user /usr/local/sbin/ngircd
@reboot user /home/user/atheme/bin/atheme-services

Chỉ cần bỏ từ usernếu bạn đang chỉnh sửa crontab của người dùng crontab -e.

Thay vào đó, bạn có thể sử dụng các tệp initscripts hoặc systemd của System V, tùy thuộc vào hệ thống bạn có.


Ồ, tôi đã quen với điều đó khi tôi đăng nó. Vấn đề là một trong những ứng dụng hoàn toàn không chạy và nếu tôi nhớ lại một cách chính xác, thì nó đã được chạy như một người dùng gọi là "ircuser" và một crontab cho điều đó.
Journeyman Geek

Tôi đã chỉnh sửa bài viết của mình để phản ánh chính xác lệnh bạn phải kiểm tra, chỉ vì tôi cũng vấp phải rất nhiều điều này. Thay thế "người dùng" bằng "ircuser" khi cần thiết.
rexkogitans
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.