• 实际可行方案
  • 停止
  • 开机启动

    Author : zbzhen,        Modified : Sun Jan 26 20:06:55 2025

    以ollama为例子

    要设置 Ollama 开机启动,你需要将 Ollama 添加到系统启动项中。以下是一个通用的方法,适用于大多数 Linux 发行版(如 Ubuntu)和 macOS:

    Linux (例如 Ubuntu)

    1. 创建一个 Systemd 服务文件
      打开终端并创建一个新的服务文件:

      sudo nano /etc/systemd/system/ollama.service
      
    2. 添加服务配置
      在文件中添加以下内容:

      [Unit]
      Description=Ollama Service
      After=network.target
      
      [Service]
      ExecStart=/path/to/ollama
      Restart=always
      User=your-username
      Group=your-groupname
      
      [Install]
      WantedBy=multi-user.target
      

      /path/to/ollama 替换为 Ollama 可执行文件的实际路径,将 your-usernameyour-groupname 替换为你的用户名和组名。

    3. 重新加载 Systemd 配置

      sudo systemctl daemon-reload
      
    4. 启用并启动服务

      sudo systemctl enable ollama
      sudo systemctl start ollama
      

    一行命令执行

    echo -e "[Unit]\nDescription=ollama service\nAfter=network.target\n\n[Service]\nExecStart=/usr/local/bin/ollama\nRestart=always\nUser=$(whoami)\n\n[Install]\nWantedBy=multi-user.target" | sudo tee /etc/systemd/system/ollama.service && sudo systemctl enable ollama.service && sudo systemctl start ollama.service
    

    保护机制

    • Restart=always: 始终重启服务。
    • RestartSec=10: 在服务重启前等待10秒,防止服务频繁重启。
    • LimitNOFILE=65536: 增加文件描述符限制,以防止文件描述符耗尽的问题。
    echo -e "[Unit]\nDescription=ollama service\nAfter=network.target\n\n[Service]\nExecStart=/usr/local/bin/ollama\nRestart=always\nRestartSec=10\nUser=$(whoami)\nLimitNOFILE=65536\n\n[Install]\nWantedBy=multi-user.target" | sudo tee /etc/systemd/system/ollama.service && sudo systemctl daemon-reload && sudo systemctl enable ollama.service && sudo systemctl start ollama.service
    

    code server 可这样

    echo -e "[Unit]\nDescription=codeserver service\nAfter=network.target\n\n[Service]\nExecStart=/home/zbz/ai/code-server-4.89.1-linux-amd64/bin/code-server\nRestart=always\nRestartSec=10\nUser=$(whoami)\nLimitNOFILE=65536\n\n[Install]\nWantedBy=multi-user.target" | sudo tee /etc/systemd/system/codeserver.service && sudo systemctl daemon-reload && sudo systemctl enable codeserver.service && sudo systemctl start codeserver.service
    
    echo -e "[Unit]\nDescription=codeserver service\nAfter=network.target\n\n[Service]\nExecStart=/root/code-server-4.96.4-linux-amd64/bin/code-server\nRestart=always\nRestartSec=10\nUser=$(whoami)\nLimitNOFILE=65536\n\n[Install]\nWantedBy=multi-user.target" | sudo tee /etc/systemd/system/codeserver.service && sudo systemctl daemon-reload && sudo systemctl enable codeserver.service && sudo systemctl start codeserver.service
    

    实际可行方案

    ollama

    ollama似乎默认就有这个服务

    查看ollam的服务配置文件

    cat /etc/systemd/system/ollama.service

    [Unit]
    Description=Ollama Service
    After=network-online.target
    
    [Service]
    ExecStart=/usr/local/bin/ollama serve
    User=ollama
    Group=ollama
    Restart=always
    RestartSec=3
    Environment="PATH=/usr/local/texlive/2024/bin/x86_64-linux:/home/zbz/.pyenv/shims:/home/zbz/.pyenv/bin:/usr/local/cuda-12.4/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin"
    
    [Install]
    WantedBy=default.target
    

    ssh

    sudo vim /etc/systemd/system/myssh.service

    [Unit]
    Description=myssh Service
    After=network-online.target
    
    [Service]
    ExecStart=/usr/bin/nohup /usr/bin/ssh -CqTnNf -R 2222:localhost:22 zbzhen@47.106.123.156 & 
    User=zbz
    Group=zbz
    Restart=always
    RestartSec=3
    Environment="HOME=/home/zbz"
    After=network.target sshd.service 
    
    [Install]
    WantedBy=default.target
    
    ```bash
    sudo systemctl daemon-reload
    ```
    
    1. 启用并启动服务
      sudo systemctl enable myssh
      sudo systemctl start myssh
      

    停止

    # 停止服务
    sudo systemctl stop myssh
    
    # 禁用服务
    sudo systemctl disable myssh
    
    # 删除服务文件
    sudo rm /etc/systemd/system/myssh.service
    
    # 或者,如果服务文件位于 /lib/systemd/system/ 目录中
    # sudo rm /lib/systemd/system/myssh.service
    
    # 重新加载 systemd 守护进程
    sudo systemctl daemon-reload
    
    # 检查服务是否已删除
    systemctl list-units --type=service --all | grep myssh