[英]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
[Unit]
After=network-online.target
[Service]
Type=simple
ExecStart=/var/lib/cloud9/Projects echo ****** | sudo -S bash scriptname.sh
[Install]
WantedBy=multi-user.target
#!/bin/bash
cd /var/lib/cloud9/Projects
node server.js
// 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 文件。 因此,這將有助於:
現在...
如果您在 /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.