簡體   English   中英

如何修復 BeagleBone Black 服務文件自動啟動腳本錯誤,狀態 = 203/EXEC

[英]How to fix BeagleBone Black Service File Autostart Script Error, status=203/EXEC

我希望我的 BeagleBone 機器自動啟動一個名為 server.js 的腳本。 它包括 BoneScript(BeagleBone 獨有的功能)和許多功能,包括從其他機器讀取電壓和安培數。

我使用了本教程使用 BeagleBone Black 在啟動時執行腳本

它一直顯示 status=203/EXEC 錯誤。

我為沒有 Bonescript 和 Functions 的簡單程序嘗試了相同的教程。 事實上,簡單的發送和接收腳本工作沒有任何問題。

我怎樣才能消除錯誤? 我認為它是通過導入 BeagleScript 和函數而發生的。 我不熟悉Linux環境。

任何人都可以幫助解決問題嗎?

謝謝,

https://stackoverflow.com/questions/28854705/executing-a-script-on-startup-using-beaglebone-black

-crontab
-service file 
-8 days of trying, fail and searching Google
  1. 服務文件(密碼隱藏*****)
[Unit]
After=network-online.target
[Service]
Type=simple
ExecStart=/var/lib/cloud9/Projects echo ****** | sudo -S bash scriptname.sh
[Install]
WantedBy=multi-user.target
  1. 外殼文件
#!/bin/bash
cd /var/lib/cloud9/Projects
node server.js
  1. Javascript
// Constants and global parameters
const NUM_ADC_READS = 100;
const ADC_OFFSET = 0.027 // Offset for difference between ADC_GND and GND
const ZERO_OFFSET = 0.5; // Current sensor output centred at midpoint 
const ADC_GAIN = 1.8; // Function returns 0-1, 0=0V, 1=1.8V
const VOLT_DIVIDER = 0.3491; // Voltage divider to reduce from 5V current sensor output to <1.8V ADC input
const MAX_VOLTAGE = 1.7456; // Max voltage divider output for max current sensor output
const CURRENT_CONVERSION = 25; // Current sensor sensitivity 25 A/V
const COMBINED_GAIN = 128.9; //  CURRENT_CONVERSION * ADC_GAIN / VOLT_DIVIDER
const COMBINED_OFFSET = 0.473; // ZERO_OFFSET - ADC_OFFSET

//Loading modules
var http = require('http');
var fs = require('fs');
var path = require('path');
var b = require('bonescript');


// Create variables for relays
var relay_load_1 = "P8_12"; // Relay control for output load 1 
var relay_load_2 = "P8_11"; // Relay control for output load 2 
var relay_bat_bank_1 = "P8_7"; // Relay control for input battery bank 1 
var relay_bat_bank_2 = "P8_8"; // Relay control for input battery bank 2 
var relay_bat_bank_3 = "P8_10"; // Relay control for input battery bank 3 

// Create variables for current readings
var current_load = ["P9_39", "P9_40"];
var current_bat = ["P9_37", "P9_38", "P9_33"];

// Initialize the relay control variables as OUTPUTS
b.pinMode(relay_load_1, b.OUTPUT);
b.pinMode(relay_load_2, b.OUTPUT);
b.pinMode(relay_bat_bank_1, b.OUTPUT);
b.pinMode(relay_bat_bank_2, b.OUTPUT);
b.pinMode(relay_bat_bank_3, b.OUTPUT);

// Initialize the server on port 8888
var server = http.createServer(function (req, res) {
    // requesting files
    var file = '.'+((req.url=='/')?'/index.html':req.url);
    var fileExtension = path.extname(file);
    var contentType = 'text/html';
    // Uncoment if you want to add css to your web page
    /*
    if(fileExtension == '.css'){
        contentType = 'text/css';
    }*/
    fs.exists(file, function(exists){
        if(exists){
            fs.readFile(file, function(error, content){
                if(!error){
                    // Page found, write content
                    res.writeHead(200,{'content-type':contentType});
                    res.end(content);
                }
            })
        }
        else{
            // Page not found 
            res.writeHead(404);
            res.end('Page not found');
        }
    })
}).listen(1111);


// Loading socket io module
var io = require('socket.io').listen(server);


// When communication is established
io.on('connection', function (socket) {
    socket.on('changeState_load_1', handleChangeState_load_1);
});

io.on('connection', function (socket) {
    socket.on('changeState_load_2', handleChangeState_load_2);
});

io.on('connection', function (socket) {
    socket.on('changeState_bat_1', handleChangeState_bat_1);
});

io.on('connection', function (socket) {
    socket.on('changeState_bat_2', handleChangeState_bat_2);
});

io.on('connection', function (socket) {
    socket.on('changeState_bat_3', handleChangeState_bat_3);
});

// Change relay state when a button is pressed
function handleChangeState_load_1(data) {
    var newData = JSON.parse(data);


    var status;

    if (newData.state == 1) {

        status = "OFF"

    }

    else {

        status = "ON"
    }


    console.log("Load 1 Relay =" + status);
    //console.log("Load 1 Relay =" + newData.state);

    // turn the load relay ON or OFF
    b.digitalWrite(relay_load_1, newData.state);
        return status;
} 
//function handleChangeState_load_1(data) {
//    var newData = JSON.parse(data);
//    console.log("Load 1 Relay =" + newData.state);
    // turn the load relay ON or OFF
//    b.digitalWrite(relay_load_2, newData.state);
//  return newData.state;
//}


// Change relay state when a button is pressed
function handleChangeState_load_2(data) {
    var newData = JSON.parse(data);
    console.log("Load 2 Relay =" + newData.state);
    // turn the load relay ON or OFF
    b.digitalWrite(relay_load_2, newData.state);
}

// Change relay state when a button is pressed
function handleChangeState_bat_1(data) {
    var newData = JSON.parse(data);
    console.log("Bat 1 Relay =" + newData.state);
    // turn the battery bank relay ON or OFF
    b.digitalWrite(relay_bat_bank_1, newData.state);
}

// Change relay state when a button is pressed
function handleChangeState_bat_2(data) {
    var newData = JSON.parse(data);
    console.log("Bat 2 Relay =" + newData.state);
    // turn the battery bank relay ON or OFF
    b.digitalWrite(relay_bat_bank_2, newData.state);
}

// Change relay state when a button is pressed
function handleChangeState_bat_3(data) {
    var newData = JSON.parse(data);
    console.log("Bat 3 Relay =" + newData.state);
    // turn the battery bank relay ON or OFF
    b.digitalWrite(relay_bat_bank_3, newData.state);
}

// Read load currents from analog inputs
function readLoadCurrent(data) {
    var current = 0;
    var max_current = 0;
    var min_current =1.0;
    for (let i = 0; i < NUM_ADC_READS; i++) {
        current = b.analogRead(current_load[data]);
        if (max_current < current) max_current = current;
        if (min_current > current) min_current = current;
    }
//    console.log("Load Current =" + ((max_current - min_current)/2.0));
    return ((((max_current - min_current)/2.0)) * COMBINED_GAIN);
}

// Read battery bank currents from analog inputs
function readBatCurrent(data) {
    var current = 0;
    var max_current = 0;
    var min_current = 1.0;
    for (let i = 0; i < NUM_ADC_READS; i++) {
        current = b.analogRead(current_bat[data]);
        if (max_current < current) max_current = current;
        if (min_current > current) min_current = current;
    }
//    console.log("Bat Current =" + ((max_current - min_current)/2.0));
    return ((((max_current - min_current)/2.0)) * COMBINED_GAIN);
}

var listener = io.listen(server);

var currentBat_1 = readBatCurrent(1);

function battery1power(data){

 while(1)  { return currentBat_1*data;
}
}


listener.sockets.on('connection', function(socket){
    //send data to client
    setInterval(function(){
        socket.emit('battery1power', {'battery1power': battery1power(0)});
    }, 2000);
}); 



listener.sockets.on('connection', function(socket){
    //send data to client 
    setInterval(function(){
        socket.emit('currentLoad_1', {'currentLoad_1': readLoadCurrent(0)});
    }, 2000);
});
listener.sockets.on('connection', function(socket){
    //send data to client
    setInterval(function(){
        socket.emit('currentLoad_2', {'currentLoad_2': readLoadCurrent(1)});
    }, 2000);
});
listener.sockets.on('connection', function(socket){
    //send data to client
    setInterval(function(){
        socket.emit('currentBat_1', {'currentBat_1': readBatCurrent(0)});
    }, 2000);
});
listener.sockets.on('connection', function(socket){
    //send data to client
    setInterval(function(){
        socket.emit('currentBat_2', {'currentBat_2': readBatCurrent(1)});
    }, 2000);
});
/*listener.sockets.on('connection', function(socket){
    //send data to client
    setInterval(function(){
        socket.emit('currentBat_3', {'currentBat_3': readBatCurrent(2)});
    }, 2000);
});*/


// Displaying a console message for user feedback
server.listen(console.log("Server Running ..."));


var currentBat_2 = readBatCurrent(1);

function battery2power(voltage){

   while(1){ return currentBat_2*voltage;}}



var currentBat_3 = readBatCurrent(2);

function battery3power(voltage){

    return currentBat_3*voltage;

}
var currentLoad_1 = readLoadCurrent(0);

function load1power(voltage){

    return currentLoad_1*voltage;

}
var currentLoad_2 = readLoadCurrent(1);

function load2power(voltage){

    return currentLoad_2*voltage;

}

var dgram = require('dgram');
var client = dgram.createSocket('udp4');

// Create periodical which ends a message to the client every 5 seconds
// 1000 ms is 1 second, so 5 second is 5000 ms

var interval = setInterval(function() {
    //console.log('powerBat_1 ' + battery1power(116).toFixed(4));
    client.send(
                //'Serial Number: A33******************' + load1shandleChangeState_load_1(0) +

                '33333powerBat_1 ' + battery1power(116).toFixed(4)  + 
                ';powerBat_2 ' + battery2power(110).toFixed(4) +
                ';powerBat_3 ' + battery3power(110).toFixed(4) +
                ';powerLoad_1 ' + load1power(116).toFixed(4) +
                ';powerLoad_2 ' + load2power(110).toFixed(4) +
                ';currentLoad_1 ' + readLoadCurrent(0).toFixed(4)  +  
                ';currentLoad_2 ' + readLoadCurrent(1).toFixed(4) + 
                ';currentBat_1 ' + readBatCurrent(0).toFixed(4) + 
                ';currentBat_2 ' + readBatCurrent(1).toFixed(4) + 
                ';currentBat_3 ' + readBatCurrent(2).toFixed(4), 0, 10000, PORT, HOST, 0);
},5);

錯誤消息 ● scriptname.service Loaded: loaded (/etc/systemd/system/scriptname.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Thu 2019-09-05 23:47:06世界標准時間; 8s 前 Main PID: 27859 (code=exited, status=203/EXEC)

您可能想嘗試像這樣設置 .service 文件:

[Unit]
Description=Your Description for your File!

[Service]
ExecStart=/home/debian/var/lib/cloud9/file.js

[Install]
WantedBy=multi-user.target

在 Cloud9 IDE 之外使用 .service 文件。 因此,這將有助於:

  1. 創建目錄
  2. cd 進入那個目錄
  3. 把你的文件放在你剛剛創建的目錄中,然后 cd 到
  4. 最后但並非最不重要的是,使用 /etc/systemd/system/ 目錄。 建立您的 .servive 文件。

現在...

如果您在 /home/debian/ 目錄中。 並且已經創建了您的 .service 文件,將 .service 文件更改為如下所示:

[Unit]
Description=Whatever you want goes here to describe your file use...

[Service]
ExecStart=/home/debian/<NewlyMadeDirectory>/<TheFileYouWantToRunWithFileSuffix>

[Install]
WantedBy=multi-user.target

試試這個想法,然后回復我。

賽斯

PS 我會等着聽你說這是如何解決的。 哦,您需要在 node.js 文件中確保它是可執行的,然后使用 chmod a+x yourFile.js 設置權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM