如何使用bash / terminal将命令传递给自定义linux服务

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

目标:在Linux中将自定义bash脚本作为服务运行,并允许我像将其通过终端/ bash传递给大多数其他服务一样,将命令传递给它。

我已经设置并测试了一个脚本,可以执行我需要的脚本,但我不知道如何像其他服务一样能够向其传递命令。示例:nano打开nano编辑器以读取指定的文件。我要执行“风扇开启”,它将调用新服务“风扇”并执行“开启”命令。奖励:能够将变量保存到配置文件中,以便以后进行修改。但是现在,我在脚本顶部设置了变量,因此它不是完全必要的。

当前单位文件:

[Unit]
Description=Fan control Service                                                                                                                                                                         
[Service]
Type=simple
Restart=always
RestartSec=30
ExecStart=/home/pi/Documents/FanControl.sh
User=pi

[Install]
WantedBy=multi-user.target

脚本:

#!/bin/bash


#########################################################
#  User Settings
#GPIO Pin Number to use to control fan transistor.
fanpin=3
#Celsius temp to turn fan on/off
offtemp=55
ontemp=60
#Turn on the looping script automatically or not
autostart=TRUE
#Determine how often to scan temp and turn fan on/off if in auto
sleepinterval=10

#########################################################

#Misc Variables used in script - Leave these alone - Base Settings
MaxTemp=0
FanState=OFF
mode=MANUAL
auto=FALSE

#########################################################
#          Functions Described Below 
#########################################################

before-start() {
    # Check if gpio is already exported
    if [ ! -d /sys/class/gpio/gpio$fanpin ]
    then
      #Export the Pin
      echo $fanpin > /sys/class/gpio/export
      sleep 1 ;# Short delay while GPIO permissions are set up
      echo Fan Pin Exported Successfully.
      # Setup the pin as an output  
      sudo echo "out" > /sys/class/gpio/gpio$fanpin/direction
    fi
    }

#Function to turn fan on
on() {
        # Sets FanPin to high
        echo "1" > /sys/class/gpio/gpio$fanpin/value
        FanState=ON
        mode=Manual
        auto=FALSE
        echo Fan Turned on -- Mode set to Manual.
        echo
    }

#Function to turn fan off
off() {
        # Sets FanPin to low
        echo "0" > /sys/class/gpio/gpio$fanpin/value
        FanState=OFF
        mode=Manual
        auto=FALSE
        echo Fan Turned off -- Mode set to Manual.
        echo
    }   

#Function to set the variables to values
#Haven't actually tested this function yet
Set() {
    if $2 = "ontemp"
    then
        ontemp=$2
    else
        $2=$3
    fi
}

#########################################################
#    Begin Service Execution Code
#########################################################
#Don't know whow to write this section to keep it running as a service
#But it works well for testing purposes
before-start
    on
    sleep 3
    off
echo
read -p "Select an action": Q
$Q
echo
action="$1"
serviceName="Fan-Control Service"
echo Exiting Fan Service

我可以使用systemctl daemon-reload,它可以加载服​​务。我可以使用“ systemctl启动风扇”,并且服务成功启动,没有错误。它也会使风扇运转几秒钟,所以我知道它的启动很好。

[当尝试使用'fan on'作为bash命令时,我收到“找不到命令”-如何将其作为工作命令?-我需要在脚本中进行哪些更改以使它保持活动状态,以便以后能够将此类命令传递给它?

目标:在Linux中将自定义的bash脚本作为服务运行,并允许我像通过终端/ bash向大多数其他服务一样将命令传递给它。我已经设置并测试了一个脚本,可以执行...

linux bash service raspberry-pi raspbian
1个回答
0
投票

服务通常不响应交互式命令,而是响应来自预定义集合的服务管理命令。如果这是您要证明的概念,那么我建议选择其他方向。

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