Redis telling me "Failed opening .rdb for saving: Permission denied" - django

I'm running Redis server 2.8.17 on a Debian server 8.5. I'm using Redis as a session store for a Django 1.8.4 application.
I haven't changed the software configuration on my server for a couple of months and everything was working just fine until a week ago when Django began raising the following error:
MISCONF Redis is configured to save RDB snapshots but is currently not able to persist to disk. Commands that may modify the data set are disabled. Please check Redis logs for details...
I checked the redis log and saw this happening about once a second:
1 changes in 900 seconds. Saving...
Background saving started by pid 22213
Failed opening .rdb for saving: Permission denied
Background saving error
I've read these two SO questions 1, 2 but they haven't helped me find the problem.
ps shows that user "redis" is running the server:
redis 26769 ... /usr/bin/redis-server *.6379
I checked my config file for the redis file name and path:
grep ^dir /etc/redis/redis.conf =>
dir /var/lib/redis
grep ^dbfilename /etc =>
dbfilename dump.rdb
The permissons on /var/lib/redis are 755 and it's owned by redis:redis.
The permissons on /var/lib/redis/dump.rdb are 644 and it's owned by redis:redis too.
I also ran strace on the server process:
ps -C redis-server # pid = 26769
sudo strace -p 26769 -o /tmp/strace.out
But when I examine the output, I don't see any errors. In particular I don't see a "Permission denied" error as I would expect.
Also, /var/lib/redis is not an NFS directory.
Does anyone know what else could be causing this? I'd hate to have to stop using Redis. I know I can run the command "set stop-writes-on-bgsave-error yes" but that doesn't solve the problem.
This is now happening on a daily basis and the only way I can stop the error is to restart the Redis server.
Thanks.

I just had a similar issue. Despite my config file being correct, when I checked the actual dbfilename and dir in redis-client, they were incorrect.
Run redis-cli and then
CONFIG GET dbfilenamewhich should return something like
1) "dbfilename"
2) "dump.rdb"
1) is just the key and 2) the value. Similarly then run CONFIG GET dir should return something like
1) "dir"
2) "/var/lib/redis"
Confirm that these are correct and if not, set them with CONFIG SET dir /correct/path
Hope this helps!

If you have moved Redis to a new mounted volume: /mnt/data-01.
sudo vim /etc/systemd/system/redis.service
Set ReadWriteDirectories=-/mnt/data-01
sudo mkdir /mnt/data-01/redis
Set chown and chmod on new redis data dir and rdb file.
The permissons on /var/lib/redis are 755 and it's owned by redis:redis
The permissons on /var/lib/redis/dump.rdb are 644 and it's owned by redis:redis
Switch configurations while redis is running
$ redis-cli
127.0.0.1:6379> CONFIG SET dir /data/tmp
redis-cli 127.0.0.1:6379> CONFIG SET dbfilename temp.rdb
127.0.0.1:6379> BGSAVE
tail /var/log/redis/redis.cnf (verify saved)

Start Redis Server in a directory where Redis has write permissions
The answers above will definitely solve your problem, but here's what's actually going on:
The default location for storing the rdb.dump file is ./ (denoting current directory). You can verify this in your redis.conf file. Therefore, the directory from where you start the redis server is where a dump.rdb file will be created and updated.
Since you say your redis server has been working fine for a while and this just started happening, it seems you have started running the redis server in a directory where redis does not have the correct permissions to create the dump.rdb file.
To make matters worse, redis will also probably not allow you to shut down the server either until it is able to create the rdb file to ensure the proper saving of data.
To solve this problem, you must go into the active redis client environment using redis-cli and update the dir key and set its value to your project folder or any folder where non-root has permissions to save. Then run BGSAVE to invoke the creation of the dump.rdb file.
CONFIG SET dir "/hardcoded/path/to/your/project/folder"
BGSAVE
(Now, if you need to save the dump.rdb file in the directory that you started the server in, then you will need to change permissions for the directory so that redis can write to it. You can search stackoverflow for how to do that).
You should now be able to shut down the redis server. Note that we hardcoded the path. Hardcoding is rarely a good practice and I highly recommend starting the redis server from your project directory and changing the dir key back to./`.
CONFIG SET dir "./"
BGSAVE
That way when you need redis for another project, the dump file will be created in your current project's directory and not in the hardcoded path's project directory.

You can resolve this problem by going into the redis-cli
Type redis-cli in the terminal
Then write config set stop-writes-on-bgsave-error no and it resolved my problem.
Hope it resolved your problem

Up to redis 3.2 it shipped with pretty insane defaults which opened the port to the public. In combination with the CONFIG SET instruction everybody can change your redis config from outside easily. If the error starts after some time, someone probably changed your config.
On your local machine check that
telnet SERVER_IP REDIS_PORT
is denied. Otherwise check your config, you should have the setting
bind 127.0.0.1
enabled.
Dependent on the user that runs redis, you should also check for damage that the intruder has done.

Related

Starting NginX with my modified nginx.conf on ECS

I have an environment in AWS with an ECS cluster, an EFS source and some services running on this cluster.
One of my services is the NginX web server which I use to serve our site and our services. As a solution to keep some sensitive and static configuration files we have chosen the EFS service. So, each service creates a volume from this EFS and mount it every time a container starts.
The problem is with NginX. I want to store my nginx.conf file into an EFS folder and after the NginX service starts, we want the container to copy this file at /etc/nginx/ folder in order for my NginX server to start with my configuration.
I've tried to build my own image including my configuration with success but this is not what we want.That means that we should build a new image every time we want to change a line on nginx.conf.
I've tried to create a script to run every time the container starts and copy my configuration but i didn't manage to make it play on ECS. Either the NginX failed to reload, either the syntax is wrong, either the file is not available.
#!/bin/bash
cp /efs/nginx.conf /etc/nginx/
nginx -s reload
Ι considered to find out how to create a cron job to run every X minutes and copy my nginx.conf to etc/nginx but this seems to be a stupid approach.
I made like 60 different task definitions revisions in order to find out how this CMD Environment option works on ECS. Of course the most of them has to do with the syntax and i get bach errors like "invalid option: bash" or "invalid option: /tmp/1.sh" etc
Samples:
1.Command ["cp","/efs/nginx.conf /etc/nginx/"]
2.Entry point ["nginx","-g","daemon off;"]
Command ["cp /efs/nginx.conf /etc/nginx/"]
Entry point: ["nginx","-g","daemon off"]
Command: ["/bin/sh","cp","/efs/nginx.conf/","/etc/nginx/"]
Command ["[\"cp\"","\"/efs/nginx.conf\"","\"/etc/nginx/\"]","[\"nginx\"","\"-g\"","\"daemon off;\"]"]
Command ["cp /efs/nginx.conf /etc/nginx/","nginx -g daemon off;"]
Command ["cp","/efs/nginx.conf /etc/nginx/","nginx -g daemon off;"]
-
Does anyone knows or does anyone already implement this solution on ECS?
To replace /etc/nginx/nginx.conf with a modified one from a binded volume?
Thanks in advance
SOLUTION:
As I mention at my question above, I'd like to use a static nginx.conf file, which will be into an EFS folder, into my nginx service container.
My task definition is simple like this
FROM nginx
EXPOSE 80
RUN mkdir /etc/nginx/html
Through ECS task definition I create a volume and then a mounting point which is an easy process and works fine. The problem was in the entrypoint field which supposed to include my script's directory and to my script itself.
At ECS task definition Environment entrypoint field i putted
sh,-c,/efs/docker-cmd-nginx.sh
and my script is just the following
#!/bin/dash
cp /efs/nginx.conf /etc/nginx/ &&
nginx -g "daemon off;"
PS: The problem probably was at:
my script which I didn't use double quotes at the daemon off; part but I was using double quotes on the whole line nginx -g daemon off;
my script was trying to reload nginx which was not even running yet.
my attempt to put the commands seperately at my task's entrypoint was wrong, syntax-wise for sure and maybe strategy-wise as well.

How to access UI in Airflow 1.10?

To start with I am trying to upgrade from 1.9 version to 1.10 so my setup contains two vms running different versions of airflow with different port forwarding.
I can access UI from vm running with 1.9 but not able to access UI from 1.10.
To debug I want to confirm if airflow webserver is running. if I execute
sudo systemctl start airflow-webserver
it throws no error but when
I am looking at netstat I am not seeing any process listening to port 8080(default).
Also I have not created any user as I do not need rbac authentication ? Can that be a problem?
As requested by #kaxil. Below is the output of ps aux | grep airflow
Can someone provide some suggestions on how to fix this problem? Also if you need any further resource can provide it. I am not sure what is relevant here.
Output of journalctl -u airflow-webserver.service -b
The Error message shows that there is an issue with airflow.cfg file i.e. there might be a character in your airflow.cfg that is causing the issue. Recheck your config file, if you don't find an issue, post your config file in your question and we will try to figure it out.

Where is data_directory for homebrew? or for postgresql or how do I solve error, ""global/pg_filenode.map": No such file or directory"?

I'm having difficulty with postgresql after installing via homebrew. I'm on Mac OS X 10.9.5 (just updated today and did restart).
Note I didn't deliberately change anything from a default postgresql installation via homebrew
PROBLEM
I can't uninstall postgresql
I can't log in to view tables / start the "command line" of postgres
createdb returns an error about pg_filenode.map "no such file or directory"
initdb returns error wondering where data_directory is (I don't know)
ANY OF THESE WOULD BE SUCCESS
Log in to psql (so I can create a database or table like I can do in mysql, browse existing tables)
Uninstall postgres altogether (so I can re-try with postgresql.app)
I've spent almost 10 hours troubleshooting this and come up short.
I've looked at loads of answers already (including SO questions 24132418 and 14510237) though I can't include all links due to not having reputation points yet
Any pointers would be really appreciated!
Below seems lengthy because I have pasted all the logs, please let me know if I have missed some important info though
Thanks, -Mark
DETAILS
I have been working my way through an introduction to Heroku, and they said installing postgresql was a requirment, so I did that using homebrew
brew install postgresql
I didn't check it, I proceeded building my app, but the next day I run the webapp locally and get error,
Request URL: http://localhost:5000/admin/
Django Version: 1.6.5
Exception Type: OperationalError
Exception Value:
FATAL: could not open relation mapping file "global/pg_filenode.map": No such file or directory
Exception Location: /Users/macuser/Dropbox/code/heroku/awe01/lib/python2.7/site-packages/psycopg2/__init__.py in connect, line 164
So I want to investigate.
Now I've never used postgresql before, so I want to "get to the command line" for postgresql
Please note, I'm a complete newbie and have never used postgresql before.
In mysql I know this would be
mysql -u root -p
(and then enter password)
I'm unable to do the equivalent in postgresql
moriartymacbookair13:~ macuser$ postgres
postgres does not know where to find the server configuration file.
You must specify the --config-file or -D invocation option or set the PGDATA environment variable.
moriartymacbookair13:~ macuser$ postgres -V
postgres (PostgreSQL) 9.3.5
The more detailed heroku docs recommend installing postgresql using postgres.app
I hadn't done this, I used homebrew, so I tried uninstalling postgresql
moriartymacbookair13:~ macuser$ brew uninstall postgres
Uninstalling /usr/local/Cellar/postgresql/9.3.5_1...
Error: Permission denied - /usr/local/bin/clusterdb
That didn't work, so back to where I was. To figure out what path to specify, I ran
brew info postgresql
If you scroll down to the bottom of this, you can see it advises me of the path
moriartymacbookair13:~ macuser$ brew info postgres
postgresql: stable 9.3.5 (bottled), devel 9.4beta2
http://www.postgresql.org/
Conflicts with: postgres-xc
/usr/local/Cellar/postgresql/9.3.5_1 (2927 files, 38M) *
Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/postgresql.rb
==> Dependencies
Required: openssl ✔, readline ✔
Recommended: ossp-uuid ✔
==> Options
--32-bit
Build 32-bit only
--enable-dtrace
Build with DTrace support
--no-perl
Build without Perl support
--no-tcl
Build without Tcl support
--with-python
Build with python support
--without-ossp-uuid
Build without ossp-uuid support
--devel
install development version 9.4beta2
==> Caveats
If builds of PostgreSQL 9 are failing and you have version 8.x installed,
you may need to remove the previous version first. See:
https://github.com/Homebrew/homebrew/issues/issue/2510
To migrate existing data from a previous major version (pre-9.3) of PostgreSQL, see:
http://www.postgresql.org/docs/9.3/static/upgrading.html
When installing the postgres gem, including ARCHFLAGS is recommended:
ARCHFLAGS="-arch x86_64" gem install pg
To install gems without sudo, see the Homebrew wiki.
To reload postgresql after an upgrade:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Or, if you don't want/need launchctl, you can just run:
postgres -D /usr/local/var/postgres
Note: I have ignored the comment at the top:
Conflicts with: postgres-xc
/usr/local/Cellar/postgresql/9.3.5_1 (2927 files, 38M) *
Anyway there we have it, toward the end of that large output it confirms the path for me is /usr/local/var/postgres, so I tried -D
moriartymacbookair13:~ macuser$ postgres -D /usr/local/postgres
postgres cannot access the server configuration file "/usr/local/postgres/postgresql.conf": No such file or directory
So this time I specified the config file:
moriartymacbookair13:~ macuser$ postgres --config-file=/usr/local/var/postgres/postgresql.conf
postgres does not know where to find the database system data.
This can be specified as "data_directory" in "/usr/local/var/postgres/postgresql.conf", or by the -D invocation option, or by the PGDATA environment variable.
(Out of desperation, I even tried deleting it and going again)
moriartymacbookair13:~ macuser$ initdb /usr/local/var/postgres
The files belonging to this database system will be owned by user "macuser".
This user must also own the server process.
The database cluster will be initialized with locale "en_GB.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
initdb: directory "/usr/local/var/postgres" exists but is not empty
If you want to create a new database system, either remove or empty
the directory "/usr/local/var/postgres" or run initdb
with an argument other than "/usr/local/var/postgres".
moriartymacbookair13:~ macuser$ rm -rf /usr/local/var/postgres
moriartymacbookair13:~ macuser$ initdb /usr/local/var/postgres -E utf8
The files belonging to this database system will be owned by user "macuser".
This user must also own the server process.
The database cluster will be initialized with locale "en_GB.UTF-8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
creating directory /usr/local/var/postgres ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
creating configuration files ... ok
creating template1 database in /usr/local/var/postgres/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating collations ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
loading PL/pgSQL server-side language ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok
syncing data to disk ... ok
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
postgres -D /usr/local/var/postgres
or
pg_ctl -D /usr/local/var/postgres -l logfile start
moriartymacbookair13:~ macuser$ postgres -D /usr/local/postgres
postgres cannot access the server configuration file "/usr/local/postgres/postgresql.conf": No such file or directory
moriartymacbookair13:~ macuser$ postgres --config-file=/usr/local/var/postgres/postgresql.conf
postgres does not know where to find the database system data.
This can be specified as "data_directory" in "/usr/local/var/postgres/postgresql.conf", or by the -D invocation option, or by the PGDATA environment variable.
So I took a look at that file:
In that in the conf file itself, the data variable is not defined
moriartymacbookair13:~ macuser$ ls /usr/local/var/postgres/
PG_VERSION pg_ident.conf pg_stat/ pg_xlog/
base/ pg_multixact/ pg_stat_tmp/ postgresql.conf
global/ pg_notify/ pg_subtrans/
pg_clog/ pg_serial/ pg_tblspc/
pg_hba.conf pg_snapshots/ pg_twophase/
moriartymacbookair13:~ macuser$ vim /usr/local/var/postgres/postgresql.conf
shows that the value is commented out (see line 41... almost the whole file is commented out)
35 # FILE LOCATIONS
36 #----------------------------------------------------------------------------- -
37
38 # The default values of these variables are driven from the -D command-line
39 # option or PGDATA environment variable, represented here as ConfigDir.
40
41 #data_directory = 'ConfigDir' # use data in another directory
42 # (change requires restart)
43 #hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file
44 # (change requires restart)
45 #ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file
46 # (change requires restart)
47
48 # If external_pid_file is not explicitly set, no extra PID file is written.
49 #external_pid_file = '' # write an extra PID file
50 # (change requires restart)
HELP: DOES ANYONE KNOW WHAT I SHOULD SPECIFY THAT 'ConfigDir' AS for where data_directory is?
In case helpful
here are contents of the Cellar folder
moriartymacbookair13:~ macuser$ ls /usr/local/Cellar/postgresql/9.3.5_1/
COPYRIGHT homebrew.mxcl.postgresql.plist
HISTORY include/
INSTALL_RECEIPT.json lib/
README share/
bin/
(I don't understand why I have some postgres files in Cellar and some in usr/local/var)
I tried some other things too:
moriartymacbookair13:~ macuser$ sudo -u postgres pg_ctl -D /usr/local/var/postgres -w start
sudo: unknown user: postgres
That's based on other SO questions
moriartymacbookair13:~ macuser$ ls -ld /usr/local/var/postgres/
drwx------ 19 macuser admin 646B 20 Sep 19:46 /usr/local/var/postgres//
moriartymacbookair13:~ macuser$ chown -R postgres /usr/local/var/postgres
chown: postgres: illegal user name
moriartymacbookair13:~ macuser$ brew uninstall postgresql
Uninstalling /usr/local/Cellar/postgresql/9.3.5_1...
Error: Permission denied - /usr/local/bin/clusterdb
moriartymacbookair13:~ macuser$ brew uninstall postgres
Uninstalling /usr/local/Cellar/postgresql/9.3.5_1...
Error: Permission denied - /usr/local/bin/clusterdb
moriartymacbookair13:~ macuser$
As I say, I installed Postgresql only to try out heroku, so here is the error Chrome gives me from the code when I run foreman start locally.
(Note "the django app" is just a demo app https://devcenter.heroku.com/articles/getting-started-with-python#prepare-the-app)
It works for localhost:5000 home, but when I add /admin (the page that would interact with a database), I get the following error:
OperationalError at /admin/
FATAL: could not open relation mapping file "global/pg_filenode.map": No such file or directory
Request Method: GET
Request URL: http://localhost:5000/admin/
Django Version: 1.6.5
Exception Location: /Users/macuser/Dropbox/code/heroku/awe01/lib/python2.7/site-packages/psycopg2/__init__.py in connect, line 164
Python Executable: /Users/macuser/Dropbox/code/heroku/awe01/bin/python
Full error traceback log here: http://dpaste.com/3CREGVQ
Note this answer https://stackoverflow.com/a/5053003/870121
recommends createdb not just initdb
And the above error is the same as if I run createdb:
moriartymacbookair13:~ macuser$ createdb /usr/local/var/postgres/
createdb: could not connect to database template1: FATAL: could not open relation mapping file "global/pg_filenode.map": No such file or directory
Steps advised here
Postgres is failing with 'could not open relation mapping file "global/pg_filenode.map" '
are
Remove and re-add the launch agent
Kill the processes for <postgresql version number>
Initialize the db initdb /usr/local/var/postgres
Restart my computer
If this is relevant someone please tell me how to "Remove and re-add the launch agent"?
Is is this? (based on the output of the brew info postgresql from earlier)
moriartymacbookair13:~ macuser$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
moriartymacbookair13:~ macuser$ killall postgresql
No matching processes belonging to you were found
moriartymacbookair13:~ macuser$ killall postgres
No matching processes belonging to you were found
moriartymacbookair13:~ macuser$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
FINALLY
In case it inspires anyone,
moriartymacbookair13:~ macuser$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry and just ignore them. Thanks!
Warning: The /usr/local directory is not writable.
Even if this directory was writable when you installed Homebrew, other
software may change permissions on this directory. Some versions of the
"InstantOn" component of Airfoil are known to do this.
You should probably change the ownership and permissions of /usr/local
back to your user account.
Warning: Unbrewed dylibs were found in /usr/local/lib.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.
Unexpected dylibs:
/usr/local/lib/libguide.dylib
/usr/local/lib/libKLF_OGL.dylib
Warning: Some directories in your path end in a slash.
Directories in your path should not end in a slash. This can break other
doctor checks. The following directories should be edited:
$/Users/macuser/Dropbox/code/aws/ElasticBeanstalkCommandLineTools/AWS-ElasticBeanstalk-CLI-2.6.3/AWSDevTools.sh/macosx/python2.7/ /Users/macuser/Dropbox/code/aws/ElasticBeanstalkCommandLineTools/AWS-ElasticBeanstalk-CLI-2.6.3/AWSDevTools/eb/macosx/python2.7/
Warning: /usr/bin occurs before /usr/local/bin
This means that system-provided programs will be used instead of those
provided by Homebrew. The following tools exist at both paths:
git
git-cvsserver
git-receive-pack
git-shell
git-upload-archive
git-upload-pack
Consider setting your PATH so that /usr/local/bin
occurs before /usr/bin. Here is a one-liner:
echo export PATH='/usr/local/bin:$PATH' >> ~/.bash_profile
moriartymacbookair13:~ macuser$
Earlier today I had this error
createdb: could not connect to database postgres: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
as per http://www.postgresql.org/docs/9.3/interactive/tutorial-createdb.html
but that error seems to have gone away now
Any advice on un or re-installing postgresql, resolving the unknown user: postgres error, setting location of #data_directory = 'ConfigDir' or any other tips... I would really appreciate it. It's been a full day lost to this now so I would appreciate anything at all.
FATAL: could not open relation mapping file "global/pg_filenode.map": No such file or directory
You had a PostgreSQL install, but deleted or moved the data directory while the server was running. Or you installed it on a removable disk that you then removed. Or some application on your system is messing with how other apps change files.
moriartymacbookair13:~ macuser$ postgres
postgres does not know where to find the server configuration file.
postgres is the server application. The client is psql. However, if global/pg_filenode.map is missing you're not going to have any more luck with psql.
moriartymacbookair13:~ macuser$ brew uninstall postgres
sudo brew uninstall postgres
Anyway there we have it, toward the end of that large output it
confirms the path for me is /usr/local/var/postgres, so I tried -D
moriartymacbookair13:~ macuser$ postgres -D /usr/local/postgres
postgres cannot access the server configuration file "/usr/local/postgres/postgresql.conf": No such file or directory
You got the path wrong. Note what "brew info" said:
Or, if you don't want/need launchctl, you can just run:
postgres -D /usr/local/var/postgres
As for the postgres user:
moriartymacbookair13:~ macuser$ sudo -u postgres pg_ctl -D /usr/local/var/postgres -w start
sudo: unknown user: postgres
I think some Mac OS X installs use _postgres or postgres_. I don't have a mac, so I can't check. But it doesn't matter in your case anyway, because the datadir is owned by your user, not postgres:
moriartymacbookair13:~ macuser$ ls -ld /usr/local/var/postgres/
drwx------ 19 macuser admin 646B 20 Sep 19:46 /usr/local/var/postgres//
It looks to me like you or some tool on your system has mangled your PostgreSQL data directory, corrupting it. This shouldn't happen, so I'd be making an effort to find out what removed pg_filenode.map and how/when.
If there is no data you care about in the data directory, you should delete it and re-initdb.
I don't have a Mac and I can't see how Homebrew configures your PostgreSQL install's startup, but it sounds like it probably runs postgres as user macuser. In which case, just:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm -rf /usr/local/var/postgres
initdb -D /usr/local/var/postgres -U postgres --auth-local peer --auth-host md5 -E utf-8l
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Finally, re:
Note, when I tried to use the postgres.app installer now it told me
"Could not start on Port 5432" and froze during installation
at a guess, when you tried that you had the postgres server from Homebrew already running on 5432, but nonfunctional because of the damaged data directory.
So you really have two things here:
Re-initdb the datadir to get PostgreSQL working again; and
Figure out how it got damaged in the first place
SOLUTION to the problem I posted
sudo brew uninstall postgresql (literally, sudo solved my problem... I had read that sudo brew can be dangerous but it worked well in this case)
Restart
Tried to run postgres.app ...got error
Restart
Fully uninstalled postgres.app (following instructions on site: quit, drag to the Trash, and then "Finder > Empty Trash..." as per http://postgresapp.com/documentation/install.html)
Restart
Delelted data folder as per trouble shooting instructions of postgresapp
i.e., the 5 steps here:
Resetting Postgres.app
http://postgresapp.com/documentation/troubleshooting.html (I may have done this earlier, I forget the order of steps 5/7)
Restart
Re-installed postgresql via postgres.app
Added the path to my /etc/profile file... adding to ~/.bashrc or ~/.bash_profile doesn't work for me for some reason. Here in an
Extract from /etc/profile for me
It might be from another file for you, see https://apple.stackexchange.com/questions/12993/why-doesnt-bashrc-run-automatically#comment13715_13019
# 1:
# For postgresql postgres postgres.app:
# Otherwise psql isn't a recognised command
# Based on http://postgresapp.com/documentation/cli-tools.html
export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.3/bin
# 2:
# And this from https://devcenter.heroku.com/articles/heroku-postgresql#local-setup
export PATH="/Applications/Postgres93.app/Contents/MacOS/bin:$PATH:$PATH"
# 3:
# And now this based on error of file not existing
# from http://stackoverflow.com/questions/13868730/socket-file-var-pgsql-socket-s-pgsql-5432-missing-in-mountain-lion-os-x-ser -- don't think this made a difference though
export PGHOST=localhost
I think this is overkill; the first change is definitely useful as it allows me to go straight to psql just by typing "psql" in terminal (I personally didn't even need -h localhost); I'm less sure of the need of the other two additions
That's it.
HOW IT GOT DAMAGED IN THE FIRST PLACE
I haven't figured this out.
OTHER TIPS FOR ANY MAC USER WHO'S USING DJANGO ON HEROKU WITH POSTGRESQL
In case relevant, now that it's working, here are some more steps I've finished to get fully set up and comfortable with postgres and my new heroku app. This has been my first experience with heroku, django and postgresql so I have tried to note all details which struck me!
Note: I had locally finished the tutorial for the "polls" sample app (from https://docs.djangoproject.com/en/1.6/intro/tutorial01/). My goal was to add this /polls app to the "getting started" django sample app (from https://devcenter.heroku.com/articles/getting-started-with-python)
(Note: I chose django 1.6 since it seems to be the latest version supported by heroku right now.)
I am running Mac OS X 10.9.5 but some of my comments may be helpful for anyone confused about local/heroku postgres integration
Create a local postgres db to use with django app
Once postgres app is running (launched by double-clicking the program in Applications -> Postgres, then look out for the elephant in the notification bar if you're on a Mac), I can log in to psql. But first straight from the command line, I made a database by command
createdb cool01db
Note if you get this,
psql: could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432? or similar error, then you haven't set up the postgres app/server correctly, so don't proceed through my instructions
Now I could log in to psql as per instructions on http://postgresapp.com/documentation/cli-tools.html
psql cool01db
Running the psql command \d shows me they're nothing in this database yet; tables will be created automatically by django when I do my syncdb command
Note: Since I had already completed the polls tutorial elsewhere, I had copied the "polls" folder (which contains things like models.py) into the folder of my heroku sample app, so "polls" was a folder alongside "gettingstarted" and "hello". Therefore I also added "polls" to the list of "installed apps" in the gettingstarted/settings.py as per https://docs.djangoproject.com/en/1.6/intro/tutorial01/#activating-models
I edited the gettingstarted/settings.py file as per instructions on the django tutorial
https://docs.djangoproject.com/en/1.6/intro/tutorial01/#database-setup and https://docs.djangoproject.com/en/1.6/ref/settings/#std:setting-DATABASES
For me, this looked like:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'cool01db',
'USER': '',
'PASSWORD': '',
'HOST': 'localhost', # '127.0.0.1' probably works also
'PORT': '5432',
}
}
To use the newly-created local postgres DB and not the heroku one
I commented out this link in gettingstarted/settings.py
# DATABASES['default'] = dj_database_url.config()
This is as per excellent comment, http://stackoverflow.com/a/16422414/870121
I navigated into the project folder (which contains the above three folders and files like manage.py) and ran (locally, not on heroku) python manage.py syncdb
Here I was prompted to create a superuser with a password
Note, now the tables for the heroku sample app (tables like hello_greeting) and the django polls app (tables like polls_choice and polls_question) are all automatically created in the local postgres db, and I can view them if I log in to psql (psql cool01db from the terminal) and type \d (once you're in)
I ran foreman start and navigated to http://localhost:5000/admin/ and entered my superuser username and password I had just created. This successfully logged me in to the /admin site powered by my LOCAL postgres database
I saw the admin panel with the opportunity to add a Question as per django tutorial, so I added a question with some answers as per https://docs.djangoproject.com/en/1.6/intro/tutorial02/#make-the-poll-app-modifiable-in-the-admin
Now I visited http://localhost:5000/polls and sure enough it was working
If in the terminal I ran psql cool01db and then the sql command \d I could see the tables, and select * from question_choice showed me the updates just made. Very satisfying.
To use the heroku postgres db in development
I uncommented this line in gettingstarted/settings.py
DATABASES['default'] = dj_database_url.config()
I ran heroku config
Knew to do this from https://devcenter.heroku.com/articles/getting-started-with-python#define-config-vars
Output was this:
(awe01)moriartymacbookair13:getstartapp macuser$ heroku config
=== awe01 Config Vars
DATABASE_URL: postgres://aqmorelettersqz:uqry_pnFmorelettersYf#ec2-XX-XXX-XX-XX.compute-1.amazonaws.com:5432/dbmorelettersce
HEROKU_POSTGRESQL_YELLOW_URL: postgres://aqmorelettersqz:uqry_pnFmorelettersYf#ec2-XX-XXX-XXX-XX.compute-1.amazonaws.com:5432/dbmorelettersce
PAPERTRAIL_API_TOKEN: kmorelettersx
TIMES: 2
(awe01)moriartymacbookair13:getstartapp macuser$
Then I pasted all of that into the hidden file .env which lies in the same folder as manage.py
Syntax note: this means the file .env looked like this:
TIMES=2
DATABASE_URL=postgres://aqmorelettersqz:uqry_pnFmorelettersYf#ec2-XX-XXX-XX-XX.compute-1.amazonaws.com:5432/dbmorelettersce
HEROKU_POSTGRESQL_YELLOW_URL=pos.... etc
...i.e., with = signs but no spaces around them (and no comments in this file)
Note, this involved deleting the original "DATABASE_URL=" entry from the .env file
As far as I understand, the .env file is what your local machine sees, but the output of "heroku config" is what the heroku machine sees (corrections welcome), so I wanted them to match.
NB: Once Postgres is installed and you can connect, you’ll need to export the DATABASE_URL environment variable for your app to connect to it when running locally.
Run command export DATABASE_URL=postgres:///$(whoami)
This tells Postgres to connect locally to the database matching your user account name (which is set up as part of installation).
That's from https://devcenter.heroku.com/articles/heroku-postgresql#local-setup
Note (to self): I don't understand what happens here (I can't see a file that's changed as a result of running this, or what exactly happens). But I did a restart of computer and everything still works, I didn't need to run this again.
Now on a heroku dyno I ran "syncdb"
heroku run python manage.py syncdb
(You will be prompted to create a superuser only if you haven't already done so)
I went to myappname.herokuapp.com/admin and logged in with the superuser account created for heroku postgresql (which I have the same as local for convenience). There I was able to add a question, and this time this question is added to the heroku postgresql db. Visiting myappname.herokuapp.com/polls shows me that question available for votes
I think that's it
Now if I do foreman start, what I see at /db or /polls is the same as if I visit my locallhost:5000 or myappname.herokuapp.com, since both are using the heroku postgresdb (I don't even need my postgres server running)
To view tables and run commants like \dt or SELECT * FROM... I can do a command heroku pg:psql as per https://devcenter.heroku.com/articles/getting-started-with-python#provision-a-database
Thanks Craig Ringer for the original answer.

Not able to Start/Stop Spark Worker from Remote Machine

I have two machines A and B. I am trying to run Spark Master on machine A and Spark Worker on machine B.
I have set machine B's host name in conf/slaves in my Spark directory.
When I am executing start-all.sh to start master and workers, I am getting below message on console:
abc#abc-vostro:~/spark-scala-2.10$ sudo sh bin/start-all.sh
sudo: /etc/sudoers.d is world writable
starting spark.deploy.master.Master, logging to /home/abc/spark-scala-2.10/bin/../logs/spark-root-spark.deploy.master.Master-1-abc-vostro.out
13/09/11 14:54:29 WARN spark.Utils: Your hostname, abc-vostro resolves to a loopback address: 127.0.1.1; using 1XY.1XY.Y.Y instead (on interface wlan2)
13/09/11 14:54:29 WARN spark.Utils: Set SPARK_LOCAL_IP if you need to bind to another address
Master IP: abc-vostro
cd /home/abc/spark-scala-2.10/bin/.. ; /home/abc/spark-scala-2.10/bin/start-slave.sh 1 spark://abc-vostro:7077
xyz#1XX.1XX.X.X's password:
xyz#1XX.1XX.X.X: bash: line 0: cd: /home/abc/spark-scala-2.10/bin/..: No such file or directory
xyz#1XX.1XX.X.X: bash: /home/abc/spark-scala-2.10/bin/start-slave.sh: No such file or directory
Master is started but worker is failed to start.
I have set xyz#1XX.1XX.X.X in conf/slaves in my Spark directory.
Can anyone help me to resolve this? This is probably something I'm missing any configuration on my end.
However when I create Spark Master and Worker on same machine, It is working fine.
Have you copied all Spark's files at the worker too? Also you need to setup password less access b/w master and worker.
Here were steps I would follow,
Setting up public key authentication over SSH
Checking /etc/spark/conf.dist/spark-env.sh
scp this to your computer B from computer A (master)
Set conf/slaves, hostname for computer B
./start-all.sh
For standalone cluster mode, you may set these option in spark-env.sh.
For example,
export SPARK_WORKER_CORES=2
export SPARK_WORKER_INSTANCES=1
export SPARK_WORKER_MEMORY=4G
see SSH ACCESS, in hadoop multinode cluster setup by michael. just like that .... will solve ur probs..
http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-multi-node-cluster/

Ubuntu Log creation permission issues after Fabric build

My Django app is built on a VM Ubuntu instance via a Fabric script ran from my local dev machine as root with sudo. The Fabric script sets up a folder in:
/var/log/FOLDERNAME
and the app is set to log all log data into it.
However after each build even though the right permissions (group & folder) exist on the folder (ls -all confirms it) the log files have trouble getting generated unless I SSH to the box after each Fabric build and physically type in:
sudo chmod 777 /var/log/FOLDERNAME -Rf
... then everything works fine.
Can anyone please shed some light and/or point me in the right direction to solve this?
Cheers!
use put with mode to setup your logfile folder with permissions.
put('yourlogfile', 'yourlogfile', mode=0755)
A sidenote: Using chmod 777 is generally not a good idea. If your VM is running ubuntu your apache runs by default as www-data. chown www-data and r-w permissions for this user/group should be enough.