从中下载的文件从使用systemd作为服务运行时保存的代码中

问题描述 投票:0回答:1

我有一个应用程序,该应用程序在空中更新期间从s3存储桶下载文件。当我直接从命令行运行代码时,我可以在应用程序目录中看到下载的文件,该文件由我的代码拾取以执行固件更新。但是,当我将代码作为服务运行时,即使调用成功,也看不到下载的文件。我正在使用下面简化的代码来确定问题所在。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <ctype.h>
#include <unistd.h>
#include <string.h>
#include <limits.h>
#include <pthread.h>
#include <sched.h>
#include <semaphore.h>

const char* url = "wget https://xxxxxxxx-xxxxxxx-xxxxxxxxxxxx-xx.s3.us-east 2.amazonaws.com/firmware.bin";

int main ()
{
 system((const char*)url);
}
  1. 直接从命令行运行以上命令会产生以下结果。您可以在目录中看到firmware.bin。

    debian@beaglebone:~/downloadTest$ sudo ./test 
    HTTP request sent, awaiting response... 200 OK
    Length: 131072 (128K) [application/octet-stream]
    Saving to: ‘firmware.bin’
    
    firmware.bin                                         100% 
    2019-12-08 20:36:03 (6.21 KB/s) - ‘firmware.bin’ saved [131072/131072]
    
    debian@beaglebone:~/downloadTest$ ls -l
    total 144
    -rw-r--r-- 1 root   root   131072 Dec  4 19:11 firmware.bin
    -rwxr-xr-x 1 debian debian   8384 Dec  8 20:12 test
    -rw-r--r-- 1 debian debian    354 Dec  8 20:00 test.c
    
  2. 现在,当我运行与服务相同的程序时,在目录中看不到下载的文件。但是,当我检查该服务的状态时,它显示以下内容,这表示呼叫已通过且该文件确实已下载,实际上是我第9次尝试。

    debian@beaglebone:~$ sudo systemctl status beaSmart.service 
    [sudo] password for debian: 
    ● beaSmart.service - BeaSmart Service
    Loaded: loaded (/etc/systemd/system/beaSmart.service; enabled; vendor preset: enabled)
    Active: inactive (dead) since Sun 2019-12-08 19:43:52 UTC; 59min ago
    Process: 3474 ExecStart=/home/debian/downloadTest/test (code=exited, status=0/SUCCESS)
    Main PID: 3474 (code=exited, status=0/SUCCESS)
    
    
    Dec 08 19:43:32 beaglebone test[3474]: HTTP request sent, awaiting response... 200 OK
    Dec 08 19:43:32 beaglebone test[3474]: Length: 131072 (128K) [application/octet-stream]
    Dec 08 19:43:32 beaglebone test[3474]: Saving to: ‘firmware.bin.9’
    Dec 08 19:43:41 beaglebone test[3474]:      0K .......... .......... .......... 
    .......... .......... 39% 5.33K 15s
    Dec 08 19:43:50 beaglebone test[3474]:     50K .......... .......... .......... 
    .......... .......... 78% 6.09K 5s
    Dec 08 19:43:52 beaglebone test[3474]:    100K .......... .......... ........                        
    100% 9.95K=20s
    Dec 08 19:43:52 beaglebone test[3474]: 2019-12-08 19:43:52 (6.27 KB/s) - 
    ‘firmware.bin.9’ saved [131072/131072]
    
  3. 关于文件firmware.bin.9保存在哪里的任何见解?。为什么不将其保存在应用程序目录中?

解决方案:

debian@beaglebone:~/downloadTest$ sudo cat /etc/systemd/system/beaSmart.service 
[Unit]
Description=BeaSmart Service

[Service]
User=root 
Type=simple
WorkingDirectory=/home/debian/downloadTest
ExecStart=/home/debian/downloadTest/test

[Install]         
WantedBy=multi-user.target

我有一个应用程序,该应用程序在空中更新期间从s3存储桶下载文件。当我直接从命令行运行代码时,可以在...

c embedded-linux wget
1个回答
0
投票

默认情况下,wget在运行它的当前工作目录中下载文件。

© www.soinside.com 2019 - 2024. All rights reserved.