[Linux]Tự chạy python script khi boot

Discussion in 'Linux - PHP - Python - C# - Java' started by thitgaluoc, Apr 17, 2019.

  1. thitgaluoc

    thitgaluoc Hương Chủ

    Em làm thread này hướng dẫn cho các bác code trên python và sử dụng hệ điều hành có systemd là service manager (đại loại là quản lý các service chạy ngầm). Quá trình này gọi là "daemonize", các bác có thể google với từ khóa daemonize python script.
    1. Yêu cầu hệ thống
    - Có sử dụng systemd (thay cho initd cũ). Thí dụ : Ubuntu 15.04 trở lên, Debian Jessie trở lên, ... Hầu hết các distro mới hiện tại đều đã chuyển sang dùng systemd : https://en.wikipedia.org/wiki/Systemd#Adoption
    - file script viết bằng python, ví dụ đặt tại /home/abc/script.py
    2. Thực hiện
    Bước 1 : Tạo file mới trong /etc/systemd/system/ với tên script_run.service bằng cách chạy : sudo nano /etc/systemd/system/script_run.service và dán vào nội dung như sau :
    Code:
    [Unit]
    Description=Chay Script script.py cua tui 
    [Service]
    Type=simple
    ExecStart=/usr/bin/python /home/abc/script.py
    
    [Install]
    WantedBy=multi-user.target
    Bước 2 : Nạp lại cache của systemd bằng lệnh : sudo systemctl daemon-reload
    Bước 3 : Bật service vừa tạo và khởi động nó luôn bằng 2 lệnh
    sudo systemctl enable script_run.service
    sudo systemctl start script_run.service


    Tạo service khác các bác chỉ cần thay đường dẫn đến script thôi :D
    Với cách này thì log mà in ra màn hình các bác không xem được nhé, nên sử dụng gói logging có sẵn của python để log ra file cho tiện :D
     
    automan, EDM, console and 7 others like this.
  2. money

    money Hương Chủ

    Toàn thấy like mà ko thấy ai nói gì :D

    Có ai như anh méo biết gì py lẫn daemon không?
     
    Le Hieu likes this.
  3. Nai

    Nai MiddleMan Staff Member

    py hình như là viết tắt của từ python, còn daemon theo em biết là tên của 1 phần mềm email server/client trên linux. Mấy cái này hiện ko dùng nên .
     
  4. console

    console Bang Chúng

    Em có thể giải thích như thế này đơn giản cho a dễ hiểu :D tất cả service install lên vps được quản lý bởi systemd, deamon kiểu như thằng trông coi mấy cái đó vd như nginx, php, ...
    Bác này đang hướng dẫn là tự tạo cho mình service riêng có thể stop, start và enable là khởi động cùng vps. Bác ấy đang lấy vd là là chạy lệnh python như thật ra anh có thể áp dụng cho mọi thứ khác mà anh mong muốn nó kiểu y service vậy. Vd a soạn 1 script php đơn giản crawl kw mà kiểu crawl liên tục ngày này tháng nọ. A có thể làm 1 cái service kiểu này cho nó khoẻ. A viết 1 bash script thực thi file php đó và trỏ đường dẫn ở ExecStart là đuoc, hoặc có thể exec thẳng như bác ấy đang ví dụ.
     
    Le Hieu, Nai and money like this.
  5. money

    money Hương Chủ

    Cám ơn các pé nhưng anh chỉ nói anh ko biết py lẫn daemon (tức là chưa từng mần 2 em đoá) chứ anh hiểu thớt nói gì mà {look_down}
     
  6. wpresources

    wpresources Bang Chúng

    Chức năng có phần hơi giống screen (vì post này em thấy hai bác bàn bên screen của anh money nên em đoán vậy) em muốn hỏi cái này có ưu điểm gì hơn ko? Ví dụ em để phần mềm trên linux đôi khi bị nó killed nếu dùng daemon này có thể giúp hạn chế phần nào ko a
     
  7. Nai

    Nai MiddleMan Staff Member

    {brick}
     
  8. console

    console Bang Chúng

    {doubt} Thôi kệ để dành cho người đến sau zị
     
  9. console

    console Bang Chúng

    Khác nhau cơ bản chứ. Screen thì nó thực thi xong hết commnad nó sẽ dừng. Còn kiểu này nó chạy cùng vps chỉ dừng khi stop thôi. Nếu k sẽ k dừng. Y kiểu web server vậy chỉ dừng khi stop. Đông chí này dev java có bao h deploy microservice chạy trên ubuntu chưa? Nếu có chắc phải xài service kiểu này. Java phải chạy lệnh java -jar ... đồng chí chạy k thể nào screen mà chạy được vì sẽ chiếm màn hình trong khi đang cần nó chạy liên tục. Thay vì vậy thì nên xài service. Clear?
     
    Nai and wpresources like this.
  10. thitgaluoc

    thitgaluoc Hương Chủ

    Chạy kiểu daemon (hay service) này, nếu process bị dừng vì lý do gì đó (oom - hết bộ nhớ chẳng hạn) thì nó sẽ tự khởi động lại nha các bác :D
    Với lại nếu dùng python3 thì chỗ /usr/bin/python phải thành /usr/bin/python3 nha :D
     
    wpresources likes this.
  11. wpresources

    wpresources Bang Chúng

    Hi đúng cái em cần,bác chỉ giúp em đoạn code trên gọi chương trình java thế nào giúp em với.
     
    Last edited: Apr 18, 2019
  12. thitgaluoc

    thitgaluoc Hương Chủ

    java mình k code nên k rõ, nhưng chắc cũng tương tự thôi. Đầu tiên bạn đánh which java để tìm đường dẫn file binary của nó, thường là /usr/bin/java, sau đó copy cái đường dẫn đó vào chỗ ExecStart ấy
     
  13. console

    console Bang Chúng

    wpresources likes this.
  14. wpresources

    wpresources Bang Chúng