element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Test & Tools
  • Technologies
  • More
Test & Tools
Blog Sound and Vibration Measurement: Instrument Network Service for LabVIEW Pt7: Service Wrappers - run the instrument services as Linux Daemon
  • Blog
  • Forum
  • Documents
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Test & Tools to participate - click to join for free!
  • Share
  • More
  • Cancel
Group Actions
  • Group RSS
  • More
  • Cancel
Engagement
  • Author Author: Jan Cumps
  • Date Created: 20 Apr 2022 12:30 PM Date Created
  • Views 751 views
  • Likes 1 like
  • Comments 0 comments
  • RoadTest
  • daemon
  • mcc172
  • service
  • linux
Related
Recommended

Sound and Vibration Measurement: Instrument Network Service for LabVIEW Pt7: Service Wrappers - run the instrument services as Linux Daemon

Jan Cumps
Jan Cumps
20 Apr 2022
Sound and Vibration Measurement: Instrument Network Service for LabVIEW Pt7: Service Wrappers - run the instrument services as Linux Daemon

For the Sound and Vibration Measurement Hat for Raspberry Pi road test, I'm reviewing Measurement Computing's IEPE Measurement DAQ HAT for Raspberry Pi.
The next series of posts are going to be a subplot. I'll make software to remotely control the DAQ, via LabVIEW. In this post I'm creating a service wrapper and install the Linux service. It will start at Pi startup, and can be stopped / started as you'd expect from a service.

image

I have done this before a few years ago, for another Pi SCPI instrument: a programmable LAB 8 channel switcher. The screen captures in this post show that the services are executed by root, but if you follow the instructions, it 'll be the pi user that runs them.

Prerequisites

You should have built the two binaries for this project.

  • daqhats_scpi_socket
  • daqhats_service

These binaries should be placed in /home/pi/bin, and made executable (chmod +x <binary_name>). If you place them in another location, amend the scripts below.

Start and Stop Shell Scripts

I've created a startup and a shutdown shell script in that same /home/pi/bin directory, and made them executable (again using chmod +x <shell_script_name>).

daqhats_start.sh

#!/bin/bash
echo "start daqhats instrument service. Wait 5 seconds to complete ..."
/home/pi/bin/daqhats_service 2501 2502 0 &
sleep 5
echo "start daqhats scpi service."
/home/pi/bin/daqhats_scpi_socket 2500 2501 &
echo "start sequence completed"

daqhats_stop.sh

#!/bin/bash
killall -9 "/home/pi/bin/daqhats_scpi_socket"
killall -9 "/home/pi/bin/daqhats_service"

These scripts take care that the right order is used to start and terminate both executables. There's a 5 second sleep to allow the instrument service's binary to start its socket listening thread. Both scripts will be invoked by the service handler to start and stop the daemon.

Service Script

Now the core of this post: creating that Linux service that starts up at boot, and can be restarted by the user. I've used the Raspberry Pi OS' networking.service as inspiration, and this website for the instructions: https://www.dexterindustries.com/howto/run-a-program-on-your-raspberry-pi-at-startup/

Create a new service wrapper daqhats.service in the same directory.

[Unit]
Description=daqhats Service
DefaultDependencies=no
Requires=ifupdown-pre.service
Wants=network.target
After=local-fs.target network-pre.target apparmor.service systemd-sysctl.service systemd-modules-load.service ifupdown-pre.service network.target
Before=shutdown.target
Conflicts=shutdown.target
[Install]
WantedBy=multi-user.target
WantedBy=network-online.target
[Service]
Type=oneshot
#EnvironmentFile=-/etc/default/networking
ExecStart=/home/pi/bin/daqhats_start.sh
ExecStop=/home/pi/bin/daqhats_stop.sh
RemainAfterExit=true
TimeoutStartSec=5min
User=pi

Create a symbolic link for systemd:

sudo chmod  644 ./daqhats.service
sudo ln -s /home/pi/bin/daqhats.service /lib/systemd/system/daqhats.service

Then, tell systemd that there's a new configuration and tell it to enable the service:

sudo systemctl daemon-reload
sudo systemctl enable daqhats.service

If you reboot, the raspberry will start with the daqhats Service running.

Check:

image

Managing the Service

You can use the usual systemd commands to verify, stop and start the daemon.

sudo systemctl status daqhats.service
sudo systemctl stop daqhats.service
sudo systemctl start daqhats.service
sudo systemctl restart daqhats.service

Link to all posts.

  • Sign in to reply
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube