I was wondering why "Do NOT set -e" was present in /etc/init.d/skeleton as I thought it was always good practice.
#! /bin/sh
### BEGIN INIT INFO
# Provides: skeleton
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Example initscript
# Description: This file should be used to construct scripts to be
# placed in /etc/init.d.
### END INIT INFO
# Author: Foo Bar <foobar#baz.org>
#
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.
# Do NOT "set -e"
Debian wiki recommends it (https://wiki.debian.org/LSBInitScripts/StatusSupport) so I don't know what I should do.
Related
I'm trying to create a bash script in order to daemonized celeryd task. In my bash script, I need to create some files and add content. This content have a variable given by user named $app_name with read method and some others variables in the content.
Issue:
When I copy the content located in my bash script to the given path, it doesn't copy variables already present inside.
Example:
In my bash script I have :
########################
# Get application name #
########################
read -p "Define the application name (lowercase and without spaces): " app_name
echo "You defined the application name: $app_name"
############################################################
# Create service file /usr/local/etc/rc.d/celeryd_app_name #
############################################################
cat > /usr/local/etc/rc.d/celeryd_$app_name << EOF
#!/bin/sh
# =====================================================
# celeryd_$app_name - Starts the Celery worker daemon.
# =====================================================
#
# :Usage: /etc/init.d/celeryd_$app_name {start|stop|force-reload|restart|try-restart|status}
# :Configuration file: /etc/default/celeryd_$app_name
### BEGIN INIT INFO
# Provides: celeryd_$app_name
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
EOF
But if I open the created file I get:
### BEGIN INIT INFO
# Provides: celeryd_$app_name
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
It doesn't copy $network $local_fs $remote_fs which are present in the content.
There is another way to do that ?
Thank you !
What is happening is that the here document is expanding the variables and since they are not declared you are getting empty values, from the wiki:
By default, behavior is largely identical to the contents of double quotes: variable names are replaced by their values, commands within backticks are evaluated, etc
$ cat << EOF
> \$ Working dir "$PWD" `pwd`
> EOF
$ Working dir "/home/user" /home/user
This can be disabled by quoting any part of the label, which is then ended by the unquoted value; the behavior is essentially identical to that if the contents were enclosed in single quotes. Thus for example by setting it in single quotes:
$ cat << 'EOF'
> \$ Working dir "$PWD" `pwd`
> EOF
\$ Working dir "$PWD" `pwd`
So from your example, you could modify your script to be something like:
#!/bin/sh
cat << 'EOF' > /usr/local/etc/rc.d/celeryd_$app_name
#!/bin/sh
# =====================================================
# celeryd_$app_name - Starts the Celery worker daemon.
# =====================================================
#
# :Usage: /etc/init.d/celeryd_$app_name {start|stop|force-reload|restart|try-restart|status}
# :Configuration file: /etc/default/celeryd_$app_name
### BEGIN INIT INFO
# Provides: celeryd_$app_name
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
EOF
Which then will produce the output:
#!/bin/sh
# =====================================================
# celeryd_$app_name - Starts the Celery worker daemon.
# =====================================================
#
# :Usage: /etc/init.d/celeryd_$app_name {start|stop|force-reload|restart|try-restart|status}
# :Configuration file: /etc/default/celeryd_$app_name
### BEGIN INIT INFO
# Provides: celeryd_$app_name
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
I'm running Jasmine js tests on a project. I'm using the jasmine ruby gem to run my tests. I had everything working with some sample tests earlier but when I updated the jasmine.yml file with some new tests my tests no longer run.
When I try to run from the command line with rake jasmine:ci I get a segmentation fault in PhantomJs.
My jasmine.yml file looks like this:
# src_files
#
# Return an array of filepaths relative to src_dir to include before jasmine specs.
# Default: []
#
# EXAMPLE:
#
# src_files:
# - lib/source1.js
# - lib/source2.js
# - dist/**/*.js
#
src_files:
- app/javascripts/beatView.js
# stylesheets
#
# Return an array of stylesheet filepaths relative to src_dir to include before jasmine specs.
# Default: []
#
# EXAMPLE:
#
# stylesheets:
# - css/style.css
# - stylesheets/*.css
#
stylesheets:
- assets/application.css
# helpers
#
# Return an array of filepaths relative to spec_dir to include before jasmine specs.
# Default: ["helpers/**/*.js"]
#
# EXAMPLE:
#
# helpers:
# - helpers/**/*.js
#
helpers:
- 'helpers/**/*.js'
# spec_files
#
# Return an array of filepaths relative to spec_dir to include.
# Default: ["**/*[sS]pec.js"]
#
# EXAMPLE:
#
# spec_files:
# - **/*[sS]pec.js
#
spec_files:
- 'spec/javascripts//backbone/views/beat_spec.js'
# src_dir
#
# Source directory path. Your src_files must be returned relative to this path. Will use root if left blank.
# Default: project root
#
# EXAMPLE:
#
# src_dir: public
#
src_dir:
# spec_dir
#
# Spec directory path. Your spec_files must be returned relative to this path.
# Default: spec/javascripts
#
# EXAMPLE:
#
# spec_dir: spec/javascripts
#
spec_dir: spec/javascripts
# spec_helper
#
# Ruby file that Jasmine server will require before starting.
# Returned relative to your root path
# Default spec/javascripts/support/jasmine_helper.rb
#
# EXAMPLE:
#
# spec_helper: spec/javascripts/support/jasmine_helper.rb
#
spec_helper: spec/javascripts/support/jasmine_helper.rb
# boot_dir
#
# Boot directory path. Your boot_files must be returned relative to this path.
# Default: Built in boot file
#
# EXAMPLE:
#
# boot_dir: spec/javascripts/support/boot
#
boot_dir:
# boot_files
#
# Return an array of filepaths relative to boot_dir to include in order to boot Jasmine
# Default: Built in boot file
#
# EXAMPLE
#
# boot_files:
# - '**/*.js'
#
boot_files:
# rack_options
#
# Extra options to be passed to the rack server
# by default, Port and AccessLog are passed.
#
# This is an advanced options, and left empty by default
#
# EXAMPLE
#
# rack_options:
# server: 'thin'
I don't know if the issue is in the yml file or if there is something else that I may have messed up.
I figured this one out. The issue was in my jasmine.yml file. The path for the specs was spec/javascripts/ as you can see where it specified spec_dir and then I was giving the spec file as - 'spec/javascripts//backbone/views/beat_spec.js' which caused phantom to crash because of the repeated directory names.
This code (by someone else) might have been written using an older version of Ruby because now I'm getting an error calling 'each' on a string object. The maze string below gets passed to the maze_string_to_array method. When it's run, it yields this error in `maze_string_to_array'
NoMethodError: undefined method `each' for #<String:0x00000100854ac0>
Can you explain what the problem is, and how to fix it?
def maze_string_to_array(mazestring)
#maze = []
mazestring.each do |line|
#maze.push line.chomp
end
end
Maze string
MAZE1 = %{#####################################
# # # #A # # #
# # # # # # ####### # ### # ####### #
# # # # # # # # #
# ##### # ################# # #######
# # # # # # # # #
##### ##### ### ### # ### # # # # # #
# # # # # # B# # # # # #
# # ##### ##### # # ### # # ####### #
# # # # # # # # # # # #
# ### ### # # # # ##### # # # ##### #
# # # # # # #
#####################################}
This code is unnecessarily verbose. The whole method can be written with a map and using 1.9 String#lines instead of the old 1.8.x String#each to split lines:
#maze = mazestring.lines.map(&:chomp)
Ruby 1.8 String#each used to iterate through lines. In 1.9, String#each_line does the same thing.
In Ruby 1.9 use each_line instead of each.
But it looks as if you could replace the whole method with mazestring.split(/\n/) anyway.
On the advice I've read here and elsewhere, I decided to stop running sudo cpan, thus affecting the system perl, and instead use perlbrew to install and manage private versions of perl.
I installed perlbrew and ran perlbrew install perl-5.14.2, both without and with --force. Both times it failed to install. Below is the test summary report.
Test Summary Report
-------------------
../ext/POSIX/t/posix.t (Wstat: 0 Tests: 66 Failed: 0)
TODO passed: 11
../lib/locale.t (Wstat: 0 Tests: 117 Failed: 1)
Failed test: 99
Files=2089, Tests=455813, 723 wallclock secs (55.63 usr 8.56 sys + 402.42 cusr 50.30 csys = 516.91 CPU)
Result: FAIL
Has anyone had success using perlbrew to install Perl on OSX 10.8, who can suggest what's going wrong?
[UPDATE]
I tried installing perl 5.12.4, and got the same results. Below are some details that seem to pertain to locale:
The following locales
#
# C C POSIX POSIX af_ZA af_ZA.ISO8859-1 af_ZA.ISO8859-15
# af_ZA.UTF-8 am_ET am_ET.UTF-8 be_BY be_BY.CP1131 be_BY.CP1251
# be_BY.ISO8859-5 be_BY.UTF-8 bg_BG bg_BG.CP1251 bg_BG.UTF-8
# ca_ES ca_ES.ISO8859-1 ca_ES.ISO8859-15 ca_ES.UTF-8 cs_CZ
# cs_CZ.ISO8859-2 cs_CZ.UTF-8 da_DK da_DK.ISO8859-1 da_DK.ISO8859-15
# da_DK.UTF-8 de_AT de_AT.ISO8859-1 de_AT.ISO8859-15
# de_AT.UTF-8 de_CH de_CH.ISO8859-1 de_CH.ISO8859-15
# de_CH.UTF-8 de_DE de_DE.ISO8859-1 de_DE.ISO8859-15
# de_DE.UTF-8 el_GR el_GR.ISO8859-7 el_GR.UTF-8 en_AU
# en_AU.ISO8859-1 en_AU.ISO8859-15 en_AU.US-ASCII en_AU.UTF-8
# en_CA en_CA.ISO8859-1 en_CA.ISO8859-15 en_CA.US-ASCII
# en_CA.UTF-8 en_GB en_GB.ISO8859-1 en_GB.ISO8859-15
# en_GB.US-ASCII en_GB.UTF-8 en_IE en_IE.UTF-8 en_NZ
# en_NZ.ISO8859-1 en_NZ.ISO8859-15 en_NZ.US-ASCII en_NZ.UTF-8
# en_US en_US.ISO8859-1 en_US.ISO8859-15 en_US.US-ASCII
# en_US.UTF-8 es_ES es_ES.ISO8859-1 es_ES.ISO8859-15
# es_ES.UTF-8 et_EE et_EE.ISO8859-15 et_EE.UTF-8 eu_ES
# eu_ES.ISO8859-1 eu_ES.ISO8859-15 eu_ES.UTF-8 fi_FI
# fi_FI.ISO8859-1 fi_FI.ISO8859-15 fi_FI.UTF-8 fr_BE
# fr_BE.ISO8859-1 fr_BE.ISO8859-15 fr_BE.UTF-8 fr_CA
# fr_CA.ISO8859-1 fr_CA.ISO8859-15 fr_CA.UTF-8 fr_CH
# fr_CH.ISO8859-1 fr_CH.ISO8859-15 fr_CH.UTF-8 fr_FR
# fr_FR.ISO8859-1 fr_FR.ISO8859-15 fr_FR.UTF-8 he_IL
# he_IL.UTF-8 hi_IN.ISCII-DEV hr_HR hr_HR.ISO8859-2 hr_HR.UTF-8
# hu_HU hu_HU.ISO8859-2 hu_HU.UTF-8 hy_AM hy_AM.ARMSCII-8
# hy_AM.UTF-8 is_IS is_IS.ISO8859-1 is_IS.ISO8859-15
# is_IS.UTF-8 it_CH it_CH.ISO8859-1 it_CH.ISO8859-15
# it_CH.UTF-8 it_IT it_IT.ISO8859-1 it_IT.ISO8859-15
# it_IT.UTF-8 ja_JP ja_JP.SJIS ja_JP.UTF-8 ja_JP.eucJP kk_KZ
# kk_KZ.PT154 kk_KZ.UTF-8 ko_KR ko_KR.CP949 ko_KR.UTF-8
# ko_KR.eucKR lt_LT lt_LT.ISO8859-13 lt_LT.ISO8859-4
# lt_LT.UTF-8 nl_BE nl_BE.ISO8859-1 nl_BE.ISO8859-15
# nl_BE.UTF-8 nl_NL nl_NL.ISO8859-1 nl_NL.ISO8859-15
# nl_NL.UTF-8 no_NO no_NO.ISO8859-1 no_NO.ISO8859-15
# no_NO.UTF-8 pl_PL pl_PL.ISO8859-2 pl_PL.UTF-8 pt_BR
# pt_BR.ISO8859-1 pt_BR.UTF-8 pt_PT pt_PT.ISO8859-1 pt_PT.ISO8859-15
# pt_PT.UTF-8 ro_RO ro_RO.ISO8859-2 ro_RO.UTF-8 ru_RU
# ru_RU.CP1251 ru_RU.CP866 ru_RU.ISO8859-5 ru_RU.KOI8-R
# ru_RU.UTF-8 sk_SK sk_SK.ISO8859-2 sk_SK.UTF-8 sl_SI
# sl_SI.ISO8859-2 sl_SI.UTF-8 sr_YU sr_YU.ISO8859-2 sr_YU.ISO8859-5
# sr_YU.UTF-8 sv_SE sv_SE.ISO8859-1 sv_SE.ISO8859-15
# sv_SE.UTF-8 tr_TR tr_TR.ISO8859-9 tr_TR.UTF-8 uk_UA
# uk_UA.ISO8859-5 uk_UA.KOI8-U uk_UA.UTF-8 zh_CN zh_CN.GB18030
# zh_CN.GB2312 zh_CN.GBK zh_CN.UTF-8 zh_CN.eucCN zh_HK
# zh_HK.Big5HKSCS zh_HK.UTF-8 zh_TW zh_TW.Big5 zh_TW.UTF-8
#
# tested okay.
#
# None of your locales were broken.
../lib/locale.t ...................................................
Failed 1/117 subtests
So none were "broken", but one "failed". And that, it seems, prevents the installation from succeeding, even by force.
The fault comes from test 99 of the "be_BY.CP1131" locale.
The ultimate fix needs to come from either the Perl developers or Apple.
In the mean time, you can get the install to work by moving /usr/share/locale/be_BY.CP1131 to some other directory. Perl will no longer test this locale. This isn't an ideal solution, but it will get you perlbrew perl assuming you don't need this specific locale.
I am going through my home brew doctor messages and no matter what I do I can not seem to remove this message:
Warning: You have uncommitted modifications to Homebrew's core.
Unless you know what you are doing, you should run:
cd /usr/local && git reset --hard
Does anyone have any idea on how to get rid of this?
From git status /usr/local
# Library/Aliases/dwarffortress
# Library/Aliases/ultima4
# Library/Aliases/ultima7
# Library/Contributions/examples/
# Library/Formula/abfind.rb
# Library/Formula/abuse.rb
# Library/Formula/akonadi.rb
# Library/Formula/angband.rb
# Library/Formula/apc.rb
# Library/Formula/aqua-less.rb
# Library/Formula/argp-standalone.rb
# Library/Formula/attica.rb
# Library/Formula/bashreduce.rb
# Library/Formula/c10t.rb
# Library/Formula/chocolate-doom.rb
# Library/Formula/cmigemo.rb
# Library/Formula/coffee-script.rb
# Library/Formula/csstidy.rb
# Library/Formula/dosbox.rb
# Library/Formula/dotless.rb
# Library/Formula/dwarf-fortress.rb
# Library/Formula/exult.rb
# Library/Formula/flip.rb
# Library/Formula/frobtads.rb
# Library/Formula/frotz.rb
# Library/Formula/gearman-php.rb
# Library/Formula/gnu-chess.rb
# Library/Formula/gnu-go.rb
# Library/Formula/growlme.rb
# Library/Formula/imagick.rb
# Library/Formula/inform6.rb
# Library/Formula/jnethack.rb
# Library/Formula/jwhois.rb
# Library/Formula/kde-phonon.rb
# Library/Formula/kdebase-runtime.rb
# Library/Formula/kdelibs.rb
# Library/Formula/kdepimlibs.rb
# Library/Formula/libgdiplus.rb
# Library/Formula/libiconv.rb
# Library/Formula/libsgml.rb
# Library/Formula/maatkit.rb
# Library/Formula/mcrypt-php.rb
# Library/Formula/mednafen.rb
# Library/Formula/memcache-php.rb
# Library/Formula/memcached-php.rb
# Library/Formula/memcachedb.rb
# Library/Formula/midgard2-php.rb
# Library/Formula/mongo-php.rb
# Library/Formula/n2n.rb
# Library/Formula/nazghul.rb
# Library/Formula/nethack.rb
# Library/Formula/netris.rb
# Library/Formula/ninja.rb
# Library/Formula/open-tyrian.rb
# Library/Formula/orderly.rb
# Library/Formula/oxygen-icons.rb
# Library/Formula/parsley.rb
# Library/Formula/pbrt.rb
# Library/Formula/pcntl-php.rb
# Library/Formula/phpmyadmin.rb
# Library/Formula/pioneers.rb
# Library/Formula/platypus.rb
# Library/Formula/pspell-php.rb
# Library/Formula/qimageblitz.rb
# Library/Formula/robotfindskitten.rb
# Library/Formula/shared-desktop-ontologies.rb
# Library/Formula/shen.rb
# Library/Formula/slashem.rb
# Library/Formula/solr-php.rb
# Library/Formula/soprano.rb
# Library/Formula/sparse.rb
# Library/Formula/spim.rb
# Library/Formula/stone-soup.rb
# Library/Formula/strigi.rb
# Library/Formula/uggconv.rb
# Library/Formula/unnethack.rb
# Library/Formula/voldemort.rb
# Library/Formula/woof.rb
# Library/Formula/xboard.rb
# Library/Formula/xcache.rb
# Library/Formula/xdebug.rb
# Library/Formula/xmoto.rb
# Library/Formula/xu4.rb
# Library/Homebrew/test/tests
After posting on the homebrew issues log https://github.com/mxcl/homebrew/issues/11761 I was able to clear the error by running git clean -df and once that is finished brew doctor. Once complete you should see:
Your system is raring to brew.