SUSE / openSUSEThis Forum is for the discussion of Suse Linux.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
I run this script always as root and don't get any pid files,
but maybe this helps:
this other suse script crate a pid file:
Code:
#! /bin/bash
# Check for missing binaries (stale symlinks should not happen)
powersaved_BIN=/usr/sbin/powersaved
powersave_BIN=/usr/bin/powersave
ACPID_BIN=/usr/sbin/acpid
# this is the default set of acpi modules loaded if nothing is configured
DEFAULT_ACPI_MODULES="ac battery button fan processor thermal"
test -x $powersaved_BIN || exit 5
# Check for existence of needed config file and read it
# ToDo set it on the real directory
CONFIG=/etc/sysconfig/powersave
test -r $CONFIG || exit 6
. $CONFIG/common
. $CONFIG/cpufreq
. $CONFIG/thermal
if test -e /etc/sysconfig/security; then
. /etc/sysconfig/security
fi
LOGGER="/bin/logger -t rcpowersaved"
# Shell functions sourced from /etc/rc.status:
# rc_check check and set local and overall rc status
# rc_status check and set local and overall rc status
# rc_status -v ditto but be verbose in local rc status
# rc_status -v -r ditto and clear the local rc status
# rc_status -s display "skipped" and exit with status 3
# rc_status -u display "unused" and exit with status 3
# rc_failed set local and overall rc status to failed
# rc_failed <num> set local and overall rc status to <num>
# rc_reset clear local rc status (overall remains)
# rc_exit exit appropriate to overall rc status
# rc_active checks whether a service is activated by symlinks
# rc_splash arg sets the boot splash screen to arg (if active)
. /etc/rc.status
# Reset status of this service
rc_reset
# Return values acc. to LSB for all commands but status:
# 0 - success
# 1 - generic or unspecified error
# 2 - invalid or excess argument(s)
# 3 - unimplemented feature (e.g. "reload")
# 4 - user had insufficient privileges
# 5 - program is not installed
# 6 - program is not configured
# 7 - program is not running
# 8--199 - reserved (8--99 LSB, 100--149 distrib, 150--199 appl)
#
# Note that starting an already running service, stopping
# or restarting a not-running service as well as the restart
# with force-reload (in case signaling is not supported) are
# considered a success.
# maybe I could check for apm, acpi and cpufreq
# if nothing is there it makes no sense to start the program
# but this is nasty because of different kernel
# implementations and therefore different file locations
OPTS=""
SYSFS_PATH="/sys/devices/system/cpu/cpu0/cpufreq"
function load_governors()
{
if [ ! -r $SYSFS_PATH ];then
$LOGGER Cannot load cpufreq governors - No cpufreq driver available
return 1
fi
read govs < $SYSFS_PATH/scaling_available_governors
case "$govs" in
*powersave*)
;;
*)
modprobe -q cpufreq_powersave >/dev/null 2>&1
[ $? != 0 ] && $LOGGER powersave cpufreq governor could not be loaded
;;
esac
case "$govs" in
*performance*)
;;
*)
modprobe -q cpufreq_performance >/dev/null 2>&1
[ $? != 0 ] && $LOGGER perfromance cpufreq governor could not be loaded
;;
esac
case "$govs" in
*userspace*)
;;
*)
modprobe -q cpufreq_userspace >/dev/null 2>&1
[ $? != 0 ] && $LOGGER userspace cpufreq governor could not be loaded
;;
esac
case "$govs" in
*ondemand*)
;;
*)
modprobe -q cpufreq_ondemand >/dev/null 2>&1
[ $? != 0 ] && $LOGGER ondemand cpufreq governor could not be loaded
;;
esac
return 0
}
case "$1" in
start)
checkproc $powersaved_BIN
if [ $? = 0 ]; then
echo -n "daemon already running"
rc_status -v
rc_exit
elif [ -e /var/run/powersaved.pid ];then
rm -f /var/run/powersaved.pid&> /dev/null
fi;
checkproc "cpufreqd" &>/dev/null
if [ $? = 0 ]; then
echo -n "cpufreqd already running, stop it first and restart service"
rc_status -s
rc_exit
fi
ACPI_APM=`$powersave_BIN --apm-acpi`
if [ "$ACPI_APM" = "ACPI" ]; then
# set thermal polling frequency
# this should be managed by the daemon later
if [ "$THERMAL_POLLING_FREQUENCY" != "0" ];then
[ -z "$THERMAL_POLLING_FREQUENCY" ] && THERMAL_POLLING_FREQUENCY=2
for x in /proc/acpi/thermal_zone/*; do
[ -w $x/polling_frequency ] && echo "$THERMAL_POLLING_FREQUENCY" >$x/polling_frequency
done
fi
ACCESS_PROC_EVENTS=" (accessing ACPI events over acpid) "
ACPI_EVENT_FILE="/var/run/acpid.socket"
pidof $ACPID_BIN >/dev/null
ACPID_NOT_RUNNING=$?
# if acpid is not there we need access to /proc/acpi/event
if [ $ACPID_NOT_RUNNING = 1 ];then
$LOGGER "WARN: Service powersaved skipped. You have to start acpid before powersaved"
echo -n "###############################################
# ACPI system but acpid not running. #
# Start acpid first, then restart powersaved! #
###############################################"
rc_status -s
rc_exit
fi
elif [ "$ACPI_APM" = "APM" ]; then
# check whether apmd is already running
checkproc "apmd" &>/dev/null
if [ $? = 0 ];then
echo -n "APM daemon is already running, stop it first and restart service"
rc_status -s
rc_exit
fi
echo -n "This machine supports APM "
#### when neither APM nor ACPI is found, do still start the powersave daemon
#### we still provide suspend to disk and possibly cpufreq feature
#### this is always the case on ppc workstations
# else
# $LOGGER "INFO: Your system does neither support ACPI nor APM. \
#the powersave service does not provide any features for this machine, therefore the service is skipped."
# rc_status -s
fi
CPUFREQ_MODULES="speedstep_centrino speedstep_ich powernow_k8 powernow_k7 powernow_k6 longrun longhaul acpi"
CPUFREQ_MODULES_GREP="^speedstep_centrino\|^speedstep_ich\|^powernow_k8\|^powernow_k7\|^powernow_k6\|^longrun\|^longhaul\|^acpi"
###### load CPUFREQ modules############
# module specfied in sysconfig.cpufreq?
if [ "$CPUFREQD_MODULE" != "off" ]; then
# test for already loaded modules
ALREADY_LOADED_MODS=`grep $CPUFREQ_MODULES_GREP /proc/modules`
if [ "$CPUFREQD_MODULE" ]; then
modprobe -q $CPUFREQD_MODULE $CPUFREQD_MODULE_OPTS &>/dev/null
RETVAL=$?
# try to load one of the modules we know
elif [ -z "$ALREADY_LOADED_MODS" ] ; then
for MODULE in $CPUFREQ_MODULES; do
modprobe $MODULE &>/dev/null
RETVAL=$?
[ "$RETVAL" = 0 ] && break
done
# skip if no module could be loaded!
if [ "$RETVAL" != 0 ]; then
$LOGGER "CPU frequency scaling is not supported by your processor."
$LOGGER "enter 'CPUFREQD_MODULE=off' in $CONFIG/cpufreq to avoid this warning."
else
$LOGGER "enter '$MODULE' into CPUFREQD_MODULE in $CONFIG/cpufreq."
$LOGGER "this will speed up starting powersaved and avoid unnecessary warnings in syslog."
fi
fi
# see function above
# -> load powersave,performance,userspace and ondemand governor
load_governors
# sleeping should not be necessary, all is processed sequential
# usleep 10000
fi
###### load CPUFREQ modules############
echo -ne "Starting powersaved $ACCESS_PROC_EVENTS"
OPTS="$OPTS -v ${DEBUG:-3}"
startproc $powersaved_BIN -d ${ACPI_EVENT_FILE:+-f "$ACPI_EVENT_FILE"} $OPTS
rc_status -v
;;
stop)
echo -n "Shutting down powersaved "
killproc -TERM $powersaved_BIN
rc_status -v
;;
try-restart)
$0 status
if test $? = 0; then
$0 restart
else
rc_reset # Not running is not a failure.
fi
rc_status
;;
restart)
$0 stop
$0 start
rc_status
;;
force-reload|reload)
echo -n "Reload service powersaved "
killproc -HUP $powersaved_BIN
rc_status -v
;;
status)
echo -n "Checking for service powersaved "
checkproc $powersaved_BIN
rc_status -v
;;
*)
echo "Usage: $0" \
"{start|stop|status|try-restart|restart|force-reload|reload}"
exit 1
;;
esac
rc_exit
the script you just posted is a LSB compliant script the wpa script is using debians startup/stop/restart method. both should work just a matter of getting it configured properly.
now the pid file will be created and I can start the WPA without problems,
but cannot stop, reload or restart using this script:
Code:
#!/bin/sh
# Buyer beware! This is really only useful if you have a
# MiniPCI or other permanent wireless device.
# However, the wpa_supplicant daemon will start, and sit waiting
# for the name interface to come up. Therefore, if you want to use
# this with pcmcia or other nonsense, it may be best to ifrename
# your wireless interface if it has an "ethX" name that is variable.
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/sbin/wpa_supplicant
PIDFILE="/var/run/wpasupplicant.pid"
CONFIG="/etc/wpa_supplicant.conf"
PNAME="wpa_supplicant"
# insane defaults
OPTIONS="-Bw" # daemonize and wait for interface
ENABLED=0
[ -f /etc/default/wpasupplicant ] && . /etc/default/wpasupplicant
if [ "$ENABLED" = "0" ]; then
echo "wpasupplicant: disabled, see /etc/default/wpasupplicant"
exit 0;
fi
[ -f $CONFIG ] || ( echo "No configuration file found, not starting."; \
exit 1; )
[ -f $DAEMON ] || exit 0
set -e
case "$1" in
start)
echo -n "Starting wpasupplicant: "
start-stop-daemon --start --name $PNAME --oknodo --exec $DAEMON -- -B $OPTIONS -P $PIDFILE -dd
echo "done."
;;
stop)
echo -n "Stopping wpasupplicant: "
start-stop-daemon --stop --name $PNAME \
--oknodo
echo "done."
if [ -f $PIDFILE ]; then
rm -f $PIDFILE;
fi
;;
reload|force-reload)
echo -n "Reloading wpasupplicant: "
start-stop-daemon --stop --signal HUP \
--name $PNAME
echo "done."
;;
restart)
echo -n "Restarting wpasupplicant: "
start-stop-daemon --stop --name $PNAME \
--retry 5 --oknodo
if [ -f $PIDFILE ]; then
rm -f $PIDFILE;
fi
start-stop-daemon --start --name $PNAME \
--oknodo --startas $DAEMON -- -B $OPTIONS
echo "done."
;;
*)
echo "Usage: $0 {start|stop|restart|reload|force-reload}" >&2
exit 1
;;
esac
exit 0
If I try to stop get following error:
Code:
# ./wpa stop
Stopping wpasupplicant: start-stop-daemon: need at least one of --exec, --pidfile or --user
Try `start-stop-daemon --help' for more information.
linux:/home/scripts # ./wpa stop
Stopping wpasupplicant: wpa_supplicantdone.
linux:/home/scripts # ./wpa start
Starting wpasupplicant: wpa_supplicantdone.
linux:/home/scripts # ./wpa reload
Reloading wpasupplicant: start-stop-daemon: need at least one of --exec, --pidfile or --user
Try `start-stop-daemon --help' for more information.
linux:/home/scripts # ./wpa restart
Restarting wpasupplicant: start-stop-daemon: need at least one of --exec, --pidfile or --user
Try `start-stop-daemon --help' for more information.
linux:/home/scripts # start-stop-daemon --stop --name $PNAME --oknodo
start-stop-daemon: need at least one of --exec, --pidfile or --user
Try `start-stop-daemon --help' for more information.
linux:/home/scripts # ./wpa restart
Restarting wpasupplicant: start-stop-daemon: unrecognized option `--retry'
Try `start-stop-daemon --help' for more information.
do you know which command could exchange the --retry option ?
Code:
linux:/home/scripts # start-stop-daemon --help
start-stop-daemon for Debian Linux - small and fast C version written by
Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl>, public domain.
version 0.3.1, 1996-07-19
Usage:
start-stop-daemon -S|--start options ... -- arguments ...
start-stop-daemon -K|--stop options ...
start-stop-daemon -H|--help
start-stop-daemon -V|--version
Options (at least one of --exec|--pidfile|--user is required):
-x|--exec <executable> program to start/check if it is running
-p|--pidfile <pid-file> pid file to check
-u|--user <username>|<uid> stop this user's processes
-n|--name <process-name> start/stop processes with this name
-s|--signal <signal> signal to send (default 15)
-t|--test test mode, don't do anything
-o|--oknodo exit status 0 (not 1) if nothing done
-q|--quiet | -v, --verbose
Exit status: 0 = done 1 = nothing done (=> 0 if --oknodo) 2 = trouble
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.