AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1024886
Accepted
showkey
showkey
Asked: 2018-04-14 23:08:23 +0800 CST2018-04-14 23:08:23 +0800 CST 2018-04-14 23:08:23 +0800 CST

无法解析主机:content.dropboxapi.com 何时在关机时上传文件

  • 772

我想在我的电脑关闭时将文件上传到我的保管箱。

sudo vim  /etc/systemd/system/upload.service
[Unit]
Description=upload files into dropbox
Before=network.target shutdown.target  reboot.target
Requires=network-online.target

[Service]
ExecStop=/bin/true
ExecStart=/bin/bash  /home/upload.sh 
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

和upload.sh 脚本。

cd  /home
curl -X POST https://content.dropboxapi.com/2/files/upload \
            --header "Authorization: Bearer xxxx" \
            --header "Dropbox-API-Arg:  {\"path\":\"/test.txt\",\"mode\":{\".tag\":\"overwrite\"}}" \
            --header "Content-Type: application/octet-stream" \
            --data-binary @"test.txt"

bash upload.sh可以成功执行,并将test.txt文件上传到我的保管箱中。

sudo systemctl enable upload service  

重新启动我的电脑。

sudo journalctl -u upload 

Apr 13 23:58:52 localhost systemd[1]: Started upload files into dropbox.
Apr 13 23:58:52 localhost systemd[1]: Starting upload files into dropbox...
Apr 13 23:58:52 localhost bash[117]: % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Apr 13 23:58:52 localhost bash[117]: Dload  Upload   Total   Spent    Left  Speed
Apr 13 23:58:52 localhost bash[117]: 0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (6) Could not resolve host: content.dropboxapi.com; Un
Apr 13 23:58:52 localhost systemd[1]: upload.service: main process exited, code=exited, status=6/NOTCONFIGURED
Apr 13 23:58:52 localhost systemd[1]: Unit upload.service entered failed state.
Apr 13 23:58:52 localhost systemd[1]: upload.service failed.

某些 DNS 错误Could not resolve host: content.dropboxapi.com导致 upload.service 失败。

我Requires=network-online.target在upload.service中添加了,如何让DNS解析器在我的电脑关机时解析主机?

shutdown systemd dropbox
  • 3 3 个回答
  • 651 Views

3 个回答

  • Voted
  1. Best Answer
    scrapy
    2018-04-17T16:59:06+08:002018-04-17T16:59:06+08:00

    方法一:/etc/systemd/system/upload.service
    1.1 /etc/systemd/system/upload.service

    sudo vim  /etc/systemd/system/upload.service
    [Unit]
    Description=upload files into dropbox
    Before=shutdown.target  reboot.target
    Requires=network-online.target
    After=network.target    
    
    [Service]
    ExecStop=/bin/true
    ExecStart=/bin/bash  /home/upload.sh 
    StandardOutput=journal
    StandardError=journal
    
    [Install]
    WantedBy=multi-user.target
    

    1.2 vim /home/upload.sh

    cd  /home
    curl -X POST https://content.dropboxapi.com/2/files/upload \
                --header "Authorization: Bearer xxxx" \
                --header "Dropbox-API-Arg:  {\"path\":\"/test.txt\",\"mode\":{\".tag\":\"overwrite\"}}" \
                --header "Content-Type: application/octet-stream" \
                --data-binary @"test.txt"
    

    1.3 sudo systemctl enable upload.service

    方法2:/lib/systemd/system-shutdown/upload.service
    2.1 /lib/systemd/system-shutdown/upload.service

    sudo vim  /lib/systemd/system-shutdown/upload.service
    [Unit]
    Description=upload files into dropbox
    Before=shutdown.target  reboot.target
    Requires=network-online.target
    After=network.target    
    
    [Service]
    ExecStop=/bin/true
    ExecStart=/bin/bash  /home/upload.sh 
    StandardOutput=journal
    StandardError=journal
    
    [Install]
    WantedBy=multi-user.target
    

    2.2 vim /home/upload.sh

    cd  /home
    curl -X POST https://content.dropboxapi.com/2/files/upload \
                --header "Authorization: Bearer xxxx" \
                --header "Dropbox-API-Arg:  {\"path\":\"/test.txt\",\"mode\":{\".tag\":\"overwrite\"}}" \
                --header "Content-Type: application/octet-stream" \
                --data-binary @"test.txt"
    

    2.3 sudo systemctl enable /lib/systemd/system-shutdown/upload.service

    • 1
  2. WinEunuuchs2Unix
    2018-04-17T03:38:23+08:002018-04-17T03:38:23+08:00

    Execstop 和 Execstart 颠倒

    根据这个 Unix & Linux 的回答:How to run a script with systemd right before shutdown,你的 Execstop 和 Execstart 是相反的。

    这些行:

    ExecStop=/bin/true
    ExecStart=/bin/bash  /home/upload.sh
    

    应该读:

    ExecStart=/bin/true
    ExecStop=/bin/bash  /home/upload.sh
    

    答案继续提到重新启动服务。systemctl daemon-reload因此,在创建文件后,请确保systemctl enable yourservice --now


    替代方法不起作用

    ,before=等requires=有时会令人困惑。您可以将脚本放在/usr/lib/systemd/system-shutdown/目录中。它将在关闭后立即运行。请参阅:https ://superuser.com/questions/1016827/how-do-i-run-a-script-before-everything-else-on-shutdown-with-systemd

    某些系统上的/usr前缀可能不同,即仅以 . 开头的目录名称/lib。

    • 0
  3. filbranden
    2018-04-17T21:57:47+08:002018-04-17T21:57:47+08:00

    在系统宕机时运行程序或脚本的最佳方法是使用ExecStop=单元的 运行此类程序。ExecStart=可以是一个虚拟脚本(例如) ,/bin/true或者在最近的 systemd 版本中,它甚至可以被省略。

    关于依赖关系,您希望将您的单元放在您需要的服务之后,例如,network-online.target如果systemd-resolved.service您将其用于 DNS 解析。原因是系统在关机时以与启动相反的顺序停止。因此,通过在依赖项之后订购您的服务,这意味着您的ExecStop=脚本将在依赖项停止之前运行。

    像这样的东西应该工作:

    [Unit]
    Description=upload files into dropbox
    After=network.target systemd-resolved.service
    Requires=network-online.target
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/bin/true
    ExecStop=/bin/bash /home/upload.sh 
    StandardOutput=journal
    StandardError=journal
    
    [Install]
    WantedBy=multi-user.target
    

    像往常一样启用该单元(--now参数也启动它):

    $ sudo systemctl enable --now upload.service
    

    它会在停止时执行上传,您可以使用以下方法进行测试:

    $ sudo systemctl stop upload.service
    

    最近在 systemd-devel 邮件列表中对此进行了讨论。

    • 0

相关问题

  • 如何从命令行安全地关闭/重新启动/注销 KDE?

  • 如何使关机不需要管理员密码?

  • 关机前执行脚本

  • 按下电源按钮时如何关闭计算机?

  • 命令列出启动时启动的服务?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve