2015-11-20 22 views
0

這是真的在我的頭上!請幫忙!使用樹莓派上的節點將cvs文件保存到usb驅動器的問題

所以我有一個運行debian和node 0.12.6的小樹莓pi 2。

節點腳本監聽家庭自動化總線的事件並將它們保存到json列表中。然後將此列表使用每小時cron作業(每分鐘進行測試)保存到cvs到系統啓動時掛載的usb驅動器。

問題是,每次調用fs.writeFile時都會引發錯誤。

這隻會發生,如果我嘗試保存到USB驅動器,而不是本地文件夾,它工作正常。

我修改/ etc/fstab文件以包括以下

/dev/sda1  /home/pi/knx/usb  vfat user,auto,nodev,gid=pi,uid=pi,fmask=0111,dmask=0000 0 0 

這似乎在引導到安裝USB,我可以爲pi用戶使顯示目錄和文件從控制檯沒有問題。

該文件夾的權限(與安裝在USB上的USB驅動器)是這樣的....

[email protected] ~/knx $ ls -l 
total 24 
-rw-r--r-- 1 pi pi 965 Nov 20 16:40 app.js 
drwxr-xr-x 2 pi pi 4096 Nov 20 16:00 data_files 
drwxr-xr-x 2 pi pi 4096 Nov 19 12:27 install_scripts 
drwxr-xr-x 7 pi pi 4096 Nov 20 16:21 node_modules 
drwxrwxrwx 8 pi pi 8192 Jan 1 1970 usb 

驅動器看起來是安裝好的....

[email protected] ~/knx $ lsblk 
NAME  MAJ:MIN RM SIZE RO TYPE MOUNTPOINT 
sda   8:0 1 15G 0 disk 
└─sda1  8:1 1 15G 0 part /home/pi/knx/usb 

節點腳本...

//set up chron job to save list 
 
var job = new CronJob({ 
 
    cronTime: '00 0-59 * * * *', 
 
    onTick: function() { 
 
    console.log('saving file'); 
 
     json2csv({ data: listToSave, fields: fields }, function(err, csv) { 
 
     if (err) console.log(err); 
 
     tempfilename = new Date(); 
 
     fname = './usb/data_files/'+ tempfilename.toString() +'.csv'; 
 
     console.log(fname); 
 
     fs.writeFile(fname, csv, function(err) { 
 
      if (err) throw err; 
 
      console.log('file saved'); 
 
      listToSave=[]; 
 
     }); 
 
     }); 
 
    
 
    }, 
 
    start: true, 
 
});

FName參數看起來是這樣的....

'./usb/data_files/Fri Nov 20 2015 16:42:00 GMT+0000 (UTC).csv' 

如果我有任何的頭髮 - 我會和真正拉出來現在!

解決方案的任何想法?

回答

0

它看起來像你用「new Date()」創建的文件名是文件系統的無效格式。 我能夠通過格式化原始日期字符串成一個友好的文件名,使你的代碼工作:

var utils = require('util') 

上面增加了字符串格式化使用util模塊。

var today = new Date(); 
var fname = utils.format('./usb/%s-%s-%s.csv', today.getMonth(), today.getDay(), today.getHours()); 

這寫了一個「MM-dd.csv」文件名似乎在我的debian機器上工作。您可以通過添加時間,年份等來延長此時間。

+0

謝謝devduderino!所有工作正常。真的很大,謝謝 – user2870492

+0

很高興我能幫忙! – devduderino